Entity Framework Query: Включить с помощью где - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу получить все группы слоев и включить (готовые к загрузке) слои с определенным URL.

Вот мои таблицы:

 - 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, даже если у групп есть слои с другим URL: s.

1 Ответ

0 голосов
/ 14 февраля 2019

В соответствии с этим вы не можете фильтровать коллекцию Include и ThenInclude, но вы можете фильтровать родительский элемент с условием, основанным на 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();
...