2016-08-03 28 views
0

我正在嘗試在我的存儲庫中構建一個基本級別的GetAll()方法,以確保所有數據對於我的回購中的其他方法都可用並且正確。在EF中包含和過濾子集合

由於現有的數據庫設計,它相當複雜,但它圍繞包括指定當前憑證是否可以看到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))) 

回答

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