为了账号安全,请及时绑定邮箱和手机立即绑定

实体框架linq查询Include()多个子实体

实体框架linq查询Include()多个子实体

慕哥9229398 2019-09-18 19:39:09
这可能是一个非常重要的问题,但是当编写跨越三个级别(或更多)的查询时,包含多个子实体的好方法是什么?即我有4个表:Company,Employee,Employee_Car和Employee_Country公司与员工有1:m的关系。Employee与Employee_Car和Employee_Country的关系为1:m。如果我想编写一个返回所有4个表中数据的查询,我目前正在编写:Company company = context.Companies                         .Include("Employee.Employee_Car")                         .Include("Employee.Employee_Country")                         .FirstOrDefault(c => c.Id == companyID);必须有一个更优雅的方式!这是漫长的缠绕,并产生可怕的SQL我在VS 2010中使用EF4
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

使用扩展方法。将NameOfContext替换为对象上下文的名称。


public static class Extensions{

   public static IQueryable<Company> CompleteCompanies(this NameOfContext context){

         return context.Companies

             .Include("Employee.Employee_Car")

             .Include("Employee.Employee_Country") ;

     }


     public static Company CompanyById(this NameOfContext context, int companyID){

         return context.Companies

             .Include("Employee.Employee_Car")

             .Include("Employee.Employee_Country")

             .FirstOrDefault(c => c.Id == companyID) ;

      }


}

然后你的代码变成了


     Company company = 

          context.CompleteCompanies().FirstOrDefault(c => c.Id == companyID);


     //or if you want even more

     Company company = 

          context.CompanyById(companyID);


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 2781 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信