Фильтрация связанных объектов с Entity Framework - PullRequest
0 голосов
/ 12 ноября 2018

Согласно этому ответу StackOverflow:

Linq to Entities - как фильтровать дочерние объекты

, вы должны иметь возможность отфильтровать список связанных объектов вEntity Framework, используя проекцию, как я сделал здесь:

Company company = _context.Company
.Where(g => g.CompanyId == id)
.Select(comp => new
{
    group = comp,
    operators = comp.Operator,
    formFamilies = comp.FormFamily.Where(ff => ff.IsActive ?? false)
}).AsEnumerable().Select(i => i.group).FirstOrDefault();

Чтобы дать краткий обзор того, что я пытаюсь получить здесь, я пытаюсь получить список всехСемейства активных форм, связанные с этим объектом компании, однако всякий раз, когда я каким-либо образом ограничиваю результаты, набор результатов будет пустым.

  • Если строка была formFamilies = comp.FormFamily, то она возвращает два результата, один активныйодин неактивный
  • Если строка formFamilies = comp.FormFamily.Where(ff => true), то она ничего не возвращает
  • Если строка formFamilies = comp.FormFamily.OrderBy(ff => ff.FormFamilyId), то ничего не возвращается.

Любая модификациято, что я делаю для comp.FormFamily, означает, что результирующий набор ничего не возвращает, я копался в самых глубоких разделах SA, пытаясь найти решение, и пробовал каждое найденное мной решение, но, похоже, ничто не заставляет этот список что-либо возвращать.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Я не совсем понял, что должен делать ваш запрос. Но мне кажется, что вы не можете просто вызвать метод Select для другого метода результата Select.

В любом случае, вы можете просто использовать Include методы вместо проецирования.

var company = _context.Company
    .Where(c => c.Id == id)
    .Include(c => c.FormFamily).Where(ff => ff.IsActive ?? false)
    .ToList();

Не проверял. Чтобы доказать это работает или нет, обязательно поставьте модель сущности в вопрос. Тогда я могу дать более точный ответ.

0 голосов
/ 12 ноября 2018

Если предположить, что сущности Company и FormFamily имеют отношения один ко многим, я бы предложил использовать оператор соединения. Что-то подобное должно дать вам то, что вы ищете.

  var company =  from c in _context.Company
                           join f in _context.FormFamily
                           on c.Id equals f.CompanyId   
                           where c.Id == id
                           select new Company()
                           {
                               Id = c.Id,
                               operators = c.Operator.ToList(),
                               formFamilies = c.FormFamily.Where(x=>x.IsActive == 
                                               false).ToList()
                           } .FirstOrDefault();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...