我想通过LINQ对C#中的对象列表进行排序,我想通过具有特定属性的子列表对此列表进行排序:基于nhibernate的类结构,所有属性都是公共虚拟的。
ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute);
我怎样才能实现这个目标。
答案 0 :(得分:4)
听起来你的结构是这样的:
class ChildObject
{
public int Attribute { get; set; }
}
class ParentObject
{
public IEnumerable<ChildObject> ChildobjectList { get; set; }
}
在这种情况下,不可能只按IEnumerable<ParentObject>
属性对ChildObject.Attribute
进行排序,因为每个ParentObject
可能有很多值。 Linq如何知道订购使用哪个值?你将不得不使用某种聚合函数。有很多选择,但这里只有几个:
Max
按ChildobjectList
Min
按ChildobjectList
First
按ChildobjectList
Attribute
的类型可以求和,Sum
按值的总和排序确切地说,您使用哪一个取决于您的确切要求。在任何情况下,你都会这样使用它:
var result =
ParentobjectsList.OrderBy(x => x.ChildobjectList.Max(c => c.Attribute));
答案 1 :(得分:0)
var sortedList = ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute);