在EF中包含和过滤子集合

时间:2016-08-03 12:53:43

标签: c# entity-framework

我正在尝试在我的存储库中构建一个基本级GetAll()方法,以确保我的存储库中的其他方法的所有数据都可用并且正确。

由于现有的数据库设计,它相当复杂,但它围绕着包含指示当前凭证是否可以看到groupdriver的集合。

不幸的是,它现在抛出一个错误:

  

包含路径表达式必须引用在类型

上定义的导航属性

这是代码

return groups
    .Include(g => g.GroupDriverDicts)
    .Include(g => g.GroupDriverDicts.Select(d => d.Driver))
    .Include(g => g.GroupDriverDicts
                   .Select(d => d.Driver
                                 .DriverCredentialDicts
                                 .Select(dcd => dcd.CredentialId == this.AccountId)))

1 个答案:

答案 0 :(得分:0)

您无法像这样过滤包含的数据。您必须加载所有 DriverCredentialDicts 。您可以尝试以下方式:

return groups
    .Include(g => g.GroupDriverDicts.Select(d => d.Driver.DriverCredentialDicts))
    .Where(g => g.GroupDriverDicts.Any(gdd => gdd.Driver.DriverCredentialDicts
            .Any(dcd => dcd.CredentialId == this.AccountId)));

它将为您提供所有组,其中任何DriverCredentialDicts 的id等于this.AccountId