LINQ стать родителем с большинством детей - PullRequest
2 голосов
/ 21 марта 2012

У меня есть список Parent объектов, который имеет список Children объектов. Мне нужно написать запрос, который бы дал мне родителя, у которого больше всего детей. ORM - это структура сущностей, поэтому она должна работать с этим.

Код для начала:

parents.FirstOrDefault(c => c.Children.Max());

Нечто подобное.

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

Я думаю, это должно выглядеть примерно так:

parents.OrderByDescending(p => p.Children.Count()).FirstOrDefault();

Ваш запрос неверен, потому что c.Children.Max() будет пытаться выполнить итерации по дочерним элементам одного из родителей, и если они поддерживают сравнение (например, дочерниеInts), просто вернет самый большой из них.И, скорее всего, ваши объекты Children не являются bool, поэтому вы даже не сможете скомпилировать код, потому что FirstOrDefault занимает

Expression<T, bool>
1 голос
/ 21 марта 2012

Для этого вам не нужна сортировка:

int maxChildCount = parents.Max(x => x.Children.Count());
var maxParent = parents.FirstOrDefault(p => p.Children.Count() == maxChildCount);

Или как выражение запроса:

var maxParent = (from p in parents
                 let max = parents.Max(x => x.Children.Count())
                 where p.Children.Count() == max).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...