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

6

我有一个一对多的 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个回答

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

4

根据你的问题,你的查询返回一个IEnumerable<Order>对象,并且你想按SequenceNumber进行排序。

为了进行排序,必须有一个值。因为有多个产品,所以会有多个SequenceNumber。你需要决定如何选择要排序的数字。

假设你想按订单中产品的最大SequenceNumber对订单进行排序。那么查询可能是:

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

我喜欢这种方法,因为它允许在LINQ查询本身中进行排序。然而,当我尝试这样做时,我收到了一个成员访问“Int32 SequenceNumber”不合法的错误。 - HBCondo

3

如果你想对集合进行“原地”排序,只需调用

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

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

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

2
Order中,只需执行以下操作
Products = Products.OrderBy(o => o.SequenceNumber);

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


抱歉,我在原帖中更新了伪代码以包括访问器(所有内容均为公共)。 - HBCondo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接