C#List <t> OrderBy总是返回null </t>

时间:2009-10-23 14:35:04

标签: c# sql-order-by generic-list

这是我的设置。

public class ItemList : List<Item>
{
  public void Load() {...}
  public void Save() {...}
}

从XML文件加载读取以填充ItemList

然后我尝试按优先级排序项目列表。这是一个int?然而,出于测试目的,所有项目都具有不同的值。

ItemList itemList = new ItemList();
itemList.Load();

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority) as ItemList;

return newItemList;

在上面的newItemList总是为null。 itemList的Count为7.我进行了三次检查,并且itemList实例中的所有项都设置了优先级。

我做错了什么?

我也试过......

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority)
                        .ToList() as ItemList;

似乎没有任何效果。

提前致谢!

4 个答案:

答案 0 :(得分:7)

问题是OrderBy不返回ItemList,它返回IOrderedEnumerable,而ToList()不返回ItemList,它返回List。无论哪种方式,你都试图将它们都转换为ItemList,而它们不是,所以你得到null。

ItemList someList = (new ItemList {new Item(2), new Item(1), new Item(3)});

//this returns an IOrderedEnumerable<Item>
var result = someList.OrderBy(i => i.Priority); 

//this returns a List<Item>
var otherResult = someList.ToList(); 

答案 1 :(得分:2)

OrderBy或ToList都没有返回ItemList,因此当Joseph指出时,转换返回null。

当您从List<T>类继承时,您可以使用Sort方法对其进行排序:

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;

答案 2 :(得分:0)

我认为您的问题是“as ItemList”。

答案 3 :(得分:0)

LINQ运算符不能在newItemList对象上就地工作。他们创建并返回新对象。如果要进行就地排序,则应使用List&lt;&gt;的Sort()方法。