我有一个Parent
个对象列表,其中包含Children
个对象的列表。我需要写一个查询,它会给我拥有最多孩子的父母。 ORM是实体框架,所以应该使用它。
代码开头:
parents.FirstOrDefault(c => c.Children.Max());
类似的东西。
答案 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();