繁体   English   中英

EF 4过滤器子集合

[英]EF 4 Filter sub collection

我试图让我所有的主要团体及其相关实体。 而且我也想过滤BuildingPartData集合而不影响任何其他实体。 我几乎已经尝试了所有我能想到的事情,但是没有运气。

 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上添加条件/过滤器

您是否已经想到过类似的东西:

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

您不应该使用任何。 任何取值为布尔值。 因此,您实际上正在执行的操作是收集至少具有1个BuildingPartSubGroup的BuildingPartMainGroup,该建筑物最小GroupGroup的GroupGroup至少具有1个...至少具有一个BuildingPartData的,其StatusPendingApprove == true。

尝试考虑将Where <>()扩展方法完全链接到对象图。

希望这可以帮助...

编辑:

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 Profiler查看EF生成的确切SQL查询。 这样,您将对LinqToEntities查询为SQL生成的内容获得更多的了解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM