Entity framework 英孚。如何在模型中只包含一些子结果?

Entity framework 英孚。如何在模型中只包含一些子结果?,entity-framework,Entity Framework,我正在尝试选择用户列表,并根据用户选择的strLang的正确语言为每个用户选择JobTitle 诸如此类: IList<User> myData; myData = Context.Users.Where(u => u.Location == strLocation) .Include(u => u.JobTitles.Where(e => e.Language == strLang)) .To

我正在尝试选择用户列表,并根据用户选择的strLang的正确语言为每个用户选择JobTitle

诸如此类:

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

但是,Include似乎不喜欢Where子句。您不能有条件地只包含相关集合的几个实体,因此您应该使用投影来获取所需的内容:

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);
}
IList-myData;
var temp=Context.Users.Where(u=>u.Location==strLocation)
.选择(u=>new
{
用户=u;
地点=美国职位,其中(e=>e.语言==strLang));
});
foreach(温度中的变量t)
{
用户=t.用户;
用户位置=t位置;
添加(用户);
}

您不能使用“Include”方法,因为它只接受导航属性

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

EF+Query 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();
//使用Z.EntityFramework.Plus;//别忘了包括这个。
IList myData;
myData=Context.Users.Where(u=>u.Location==strLocation)
.IncludeFilter(u=>u.JobTitles.Where(e=>e.Language==strLang))
.ToList();
你可以找到这个项目

您可以找到文档


在代码后面,IncludeFilter使用投影来执行与Alexander answer完全相同的操作。

您得到了什么错误?错误消息:“包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,选择运算符作为集合导航属性。参数名称:path“这是否有帮助:否,因为我不想创建新的模型/对象,我只想减少结果的数量try Include(u=>u.JobTitles);