我想在 C# 中通过 LINQ 对对象列表进行排序,我想通过具有特定属性的子列表对该列表进行排序:基于 nhibernate 的类结构,所有属性都是公共(public)虚拟的。
ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute);
我怎样才能做到这一点。
最佳答案
听起来你的结构是这样的:
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));
关于c# - 按子列表属性排序父对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125418/