通用列表中的Orderby

时间:2011-09-02 15:12:29

标签: c# generic-list

我有一个通用列表,我从另外两个列表中形成。 orderby似乎没有正常工作。 BeOrders首先(按日期排序)然后是BTOrders(按日期排序)。我错过了明显的东西吗?我看不出有什么不妥。

orders = new List<DataLayer.OrderStatusItem>();
orders.AddRange(BeOrders);
orders.AddRange(BTOrders);

orders.OrderBy(z => z.ordered);

2 个答案:

答案 0 :(得分:12)

是的,您错过了OrderBy没有订购就地 - 它返回一个有序的序列:

var inOrder = orders.OrderBy(z => z.ordered);

或(假设orders的类型为List<...>

orders = orders.OrderBy(z => z.ordered).ToList();

请注意,这种“无副作用”的方法在整个LINQ中很普遍 - 没有一个操作符会更改它们被调用的集合;他们将视图返回到某种形式的集合(过滤,投射等)。

如果您要对List<T>进行排序,可以使用List<T>.Sort。 (你必须以不同的方式指定排序。)

答案 1 :(得分:7)

OrderBy返回IOrderedEnumerable<T>,因此您必须将其分配给变量:

orders = orders.OrderBy(z => z.ordered);