7

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

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

我怎样才能做到这一点。

4

1 回答 1

5

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

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
  • Sum按值的总和排序,假设的类型Attribute可以求和

具体使用哪一种取决于您的具体要求。在任何情况下,您都会像这样使用它:

var result = 
    ParentobjectsList.OrderBy(x => x.ChildobjectList.Max(c => c.Attribute));
于 2013-06-15T16:14:24.857 回答