EF。如何在模型中仅包含一些子结果?

时间:2016-01-23 12:15:56

标签: entity-framework

我正在尝试以用户选择的strLang所依赖的正确语言选择用户列表和每个用户JobTitle。

类似的东西:

IList<User> myData;
myData = Context.Users.Where(u => u.Location == strLocation)
                .Include(u => u.JobTitles.Where(e => e.Language == strLang))
                    .ToList();

但似乎Include不喜欢Where子句

2 个答案:

答案 0 :(得分:1)

您无法有条件地仅包含相关集合中的少数几个实体,因此您应该使用投影来获取所需的内容:

IList<User> myData;
var temp = Context.Users.Where(u => u.Location == strLocation)
      .Select(u => new
      {
        User = u;
        Locations = u.JobTitles.Where(e => e.Language == strLang));
      });

foreach(var t in temp)
{
   User user = t.User;
   user.Locations = t.Locations;
   myData.Add(user);
}

答案 1 :(得分:1)

你不能使用&#34; Include&#34;方法,因为它只采用导航属性。

免责声明:我是github上EF +项目的所有者。

EF +查询IncludeFilter 可让您轻松过滤相关实体:

// using Z.EntityFramework.Plus; // Don't forget to include this.    
IList<User> myData;
    myData = Context.Users.Where(u => u.Location == strLocation)
                    .IncludeFilter(u => u.JobTitles.Where(e => e.Language == strLang))
                        .ToList();

您可以找到项目here

您可以找到文档here

在代码背后,IncludeFilter完全像Alexander使用投影回答。