2011-02-09 113 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的编程实体框架! –