2011-02-09 41 views
0

我試圖讓我所有的maingroups及其相關實體。我還想過濾BuildingPartData集合而不影響任何其他實體。我幾乎想盡辦法想,但沒有運氣。EF 4過濾子集合

test.ContextOptions.LazyLoadingEnabled = false; 

     var buildingPartMainGroups = (from buildingPartMainGroup in test.BuildingPartMainGroup 
             from buildingPartSubGroup in buildingPartMainGroup.BuildingPartSubGroup 
             from buildingPart in buildingPartSubGroup.BuildingPart 
             from buildingPartData in buildingPart.BuildingPartData 
             where buildingPartData.StatusPendingApprove == true 
             //let buildingPartData = buildingPartMainGroup.BuildingPartSubGroup.Where(x => x.BuildingPart.Any(o => o.BuildingPartData.Any(y => y.StatusPendingApprove == true))) 
          select new 
          { 
           BuildingPartMainGroups = buildingPartMainGroup, 
           BuildingPartDatas = buildingPartData 

          }).ToList().Select(c => c.BuildingPartMainGroups); 

     foreach (var bb in buildingPartMainGroups) 
     { 
      foreach(var tt in bb.BuildingPartSubGroup) 
      { 
       foreach (var oo in tt.BuildingPart) 
       { 
        foreach (var ww in oo.BuildingPartData) 
        { 
         bool tes4t = ww.StatusPendingApprove; 
        } 
       } 
      } 
     } 

這裏是模型

http://mimo-design.com/model.png

廣東話插入圖片尚未..

var buildingPartMainGroups = test.BuildingPartMainGroup.Include("BuildingPartSubGroup.BuildingPart.BuildingPartData"). 
             Where(bpmg => bpmg.BuildingPartSubGroup. 
              Any(o => o.BuildingPart. 
               Any(x => x.BuildingPartData. 
                Any(u => u.StatusPendingApprove == true)))); 

只過濾我BuildingPartMainGroup實體。我想有我所有的BuildingPartMainGroup實體,符合條件/過濾器上BuildingPartData

+0

有關對象模型/實體模型的更多文檔可能會更好。 –

+0

新增型號:-) – mimo

+0

這說明了很多。看到我的第二個答案! –

回答

0

你已經想到是這樣的:

context.BuildingPartMainGroup 
.Inlcude("BuildingPartSubGroups.BuildingParts.BuildingPartData") 
.Where<BuildingPartMainGroup>(bpmg => bpmg.BuildingPartSubGroups.Any<BuildingPartSubGroup>(etc... 
+0

感謝您的回覆。但它沒有工作:-( – mimo

+0

您是否具有導航屬性:.Inlcude(「BuildingPartSubGroups.BuildingParts.BuildingPartData」)?否則它將無法正常工作。檢查您的實體模型。是否有一個帶有外部鑰匙等?我建議你這樣做,以獲得最大限度的EF。 –

0

你不應該使用任何。任何評估爲布爾值。因此,您實際上正在收集BuildingPartMainGroup,它具有至少1個BuildingPartSubGroup,其最小值爲1 ...,其中至少有一個具有StatusPendingApprove == true的BuildingPartData。

試着考慮鏈接到哪裏,然後沿着對象圖形向下延伸。

希望這有助於...

編輯:

context.BuildingPartMainGroups 
    .Inlcude("BuildingPartSubGroups.BuildingParts.BuildingPartData") 
    .Where<BuildingPartMainGroup> 
    (bpmg => bpmg.BuildingPartSubGroups.Where<BuildingPartSubGroup> 
    (bpsg => bpsg.BuildingParts.Where<BuildingPart> 
    (bp => bp.BuildingPartData"s".Where<BuildingPartData> 
    (bpd => bpd.StatusPendingApprove == true)))) 

我不知道你需要包括在這裏。如果您僅對BuidlingPartMainGroups感興趣而沒有關聯數據,則不需要。

有用的提示可能是使用SQl事件探查器查看EF生成的確切SQL查詢。這樣您可以更好地理解LinqToEntities查詢爲SQL生成的內容。

+0

我明白了,你可以舉一個例子嗎?不知道如何鏈接擴展名: -/ – mimo

+0

謝謝你幫助我在這裏。使用SQL Profiler我看看這個例子中的最後一個語句返回一個IEnumerable 但除了布爾值 – mimo

+0

現在解決了還是需要更多的幫助?一個好的提示是閱讀Julie Lerman的編程實體框架! –