实体框架查询:包括在哪里

时间:2019-02-14 14:59:53

标签: entity-framework linq include eager-loading

我想获取所有图层组,并包括(渴望加载)具有特定网址的图层。

这是我的桌子:

 - LayerGroup (id, List<Layer>layers and more...) 
 - Layer(id, url, List<Attribute>attributes and more...) 
 - Attribute (id and more...)

这是我到目前为止所得到的。

var groups = _context.LayerGroups
                    .Where(group => group.IsActive)
                    .Where(g => g.Layers.All(l => l.IsActive == true))
                    .Where(g => g.Layers.All(l => l.Url == "example1"))
                    .Include(g => g.Layers)                     
                    .ThenInclude(layer => layer.Attributes)
                    .Include(group => group.Layers).ThenInclude(layer => layer.SearchEngines)
                    .ToList();

但是,似乎只有在所有层都处于活动状态并且具有URL example1的情况下才能获得组。我希望获取具有正确网址的图层,即使这些组的图层具有其他url:s。

1 个答案:

答案 0 :(得分:0)

According to this您不能过滤IncludeThenInclude集合,但可以根据Include的条件过滤父对象。如果需要,则可以按以下方式编写查询:

var groups = _context.LayerGroups.Where(group => group.IsActive)
                    .Include(g => g.Layers)
                        .ThenInclude(layer => layer.Attributes)
                    .Include(group => group.Layers)
                        .ThenInclude(layer => layer.SearchEngines)
                    .Where(g => g.Layers.Any(l => l.IsActive == true && l => l.Url == "example1"))
                    .ToList();