通过LINQ订购复杂对象

时间:2012-09-26 15:10:33

标签: linq sorting

我有一个复杂的对象:

+ Client
     + Products
           + Types
               | TypeId
               | ManagerCode
               | TypeName
                ....

单个客户将与他们购买的产品集合相关联,并且每个产品都会有一系列与之相关的类型。

我需要在两个属性上对“类型”进行排序 - ManagerCode和TypeName。

例如:client.Products.ForEach(o => o.Types.OrderBy(o1 => o1.BaseType.ManagerCode));

好吧,当我这样做时,列表一旦返回到前端就不会实际订购。它维护原始排序顺序。我做错了什么?

2 个答案:

答案 0 :(得分:2)

OrderBy不会取代原始收藏品;它返回一个新排序的集合。

假设Types是一个列表,您需要

client.Products.ForEach(o =>
    o.Types = o.Types.OrderBy(o1 => o1.BaseType.ManagerCode).ToList());

答案 1 :(得分:1)

另一种解决方案是使用Sort方法。

client.Products.ForEach(o => o.Types.Sort(
    (x, y) => string.Compare(x.BaseType.ManagerCode, y.BaseType.ManagerCode));