使用Linq对集合内的集合进行排序

时间:2010-04-27 16:55:47

标签: c# linq

我有一对多的Linq查询,我想对“很多”集合中的属性进行排序。例如,在下面的伪代码中,我从Linq查询返回一个List,但我想根据Product类的SequenceNumber属性对Products属性进行排序/排序。我怎样才能做到这一点?任何信息表示赞赏。感谢。

public class Order
{
   public int OrderId;
   public List<Product> Products;
}

public class Product
{
   public string name;
   public int SequenceNumber;
}

4 个答案:

答案 0 :(得分:4)

order.Product.OrderBy(p => p.SequenceNumber);

答案 1 :(得分:4)

当我读到你的问题时,你的查询返回IEnumerable&lt; Order&gt;你想在SequenceNumber上对它们进行排序。

为了对某些内容进行排序,它必须具有一个值。有多个SequenceNumber,因为有多个产品。您需要决定如何选择要排序的数字。

假设您要对该订单上产品的最大SequenceNumber排序。然后查询可以是:

from order in orders
orderby order.Products.Max(p=>p.SequenceNumber)
select order;

答案 2 :(得分:2)

Order内,只需执行

即可
Products = Products.OrderBy(o => o.SequenceNumber);

Sort()中还有一个List<T>方法可以直接对列表进行排序。

答案 3 :(得分:2)

如果您想“就地”对集合进行排序,请致电

Products.Sort((lhs, rhs) => lhs.SequenceNumber.CompareTo(rhs.SequenceNumber));

如果要“按需”对集合进行排序,只需使用LINQ:

foreach (var product in order.Products.OrderBy(x => x.SequenceNumber)) {
}