LINQ与大多数孩子一起获得父母

时间:2012-03-21 17:10:14

标签: linq entity-framework

我有一个Parent个对象列表,其中包含Children个对象的列表。我需要写一个查询,它会给我拥有最多孩子的父母。 ORM是实体框架,所以应该使用它。

代码开头:

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

类似的东西。

2 个答案:

答案 0 :(得分:5)

我认为它看起来应该更像这样:

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

您的查询不正确,因为c.Children.Max()将尝试迭代一个父母的子女,如果他们支持比较(例如儿童是Ints),则只返回其中最大的一个。而且很可能你的Children对象不是bool,所以你甚至无法编译代码,因为FirstOrDefault需要

Expression<T, bool>

答案 1 :(得分:1)

您不需要对此进行排序:

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();