Linq包含从导航属性中选择

时间:2016-01-11 05:36:59

标签: c# linq entity-framework-6

我正在使用以下内容尝试查找与特定组织关联的单个成员记录;

var dataRow = db.Organisation
    .Include(x => x.Member.Select(m => m.Guid == MemberGuid))
    .Where(x => x.Guid == OrganisationGuid)
    .FirstOrDefault();

然而,这会引发以下错误;

" Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。参数名称:path"

包含路径有效,如果我取出"。选择(m => m.Guid == model.MemberGuid)"它返回组织的成员集合,然后我必须处理它以找到所需的成员。

有没有办法找到特定成员而不返回整个集合?

1 个答案:

答案 0 :(得分:3)

您的查询中有两个错误。首先,您尝试使用.Select来过滤记录,您只会在列中获得true/false条记录。您应该使用.Where代替。其次,.Include接受导航属性,而不是查询。

var dataRow = db.Organisation
    .Include(x => x.Member)
    .Where(x => x.Member.Guid == MemberGuid && x.Guid == OrganisationGuid)
    .FirstOrDefault();

另一种解决方案是使用join:

var dataRow = (from o in db.Organisation
              join m in db.Member
              on o.MemberGuid equals m.MemberGuid
              where o.Guid == OrganisationGuid && m.Guid == MemberGuid
              select o).FirstOrDefault();