按子列表属性排序父对象列表

时间:2013-06-15 15:55:36

标签: c# linq nhibernate

我想通过LINQ对C#中的对象列表进行排序,我想通过具有特定属性的子列表对此列表进行排序:基于nhibernate的类结构,所有属性都是公共虚拟的。

ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute);

我怎样才能实现这个目标。

2 个答案:

答案 0 :(得分:4)

听起来你的结构是这样的:

class ChildObject
{
    public int Attribute { get; set; }
}

class ParentObject
{
    public IEnumerable<ChildObject> ChildobjectList { get; set; }
}

在这种情况下,不可能只按IEnumerable<ParentObject>属性对ChildObject.Attribute进行排序,因为每个ParentObject可能有很多值。 Linq如何知道订购使用哪个值?你将不得不使用某种聚合函数。有很多选择,但这里只有几个:

  • MaxChildobjectList
  • 中的最大元素排序
  • MinChildobjectList
  • 中的最小元素排序
  • FirstChildobjectList
  • 中的第一项排序 假设Attribute的类型可以求和,
  • Sum按值的总和排序

确切地说,您使用哪一个取决于您的确切要求。在任何情况下,你都会这样使用它:

var result = 
    ParentobjectsList.OrderBy(x => x.ChildobjectList.Max(c => c.Attribute));

答案 1 :(得分:0)

var sortedList = ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute);