2015-11-06 65 views
-2

我把原始数据放到一个通用列表中。然后,我把从原始数据计算出的数据到另一个通用的清单,这一个:为什么这是一个无效的LINQ演员?

private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsList; 

的数据(包括原始和计算的)需要显示排序,通过购进总额排序,所以我希望数据按这种方式排序。由于订货泛型列表返回另一个通用的清单,我第一次尝试了排序的数据重新分配到原来的泛型列表:

itemTotalsAcrossMonthsList = (List<ItemTotalsAcrossMonths>)itemTotalsAcrossMonthsList.OrderByDescending(x => 
x.TotalPurchases13); 

...但我在路上是有良好的愿望铺成的明显,因为这codeside在我的脸上炸弹爆炸:

enter image description here

我试图把丘壑到相同类型的单独泛型列表:

private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsList; 
private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsListSortedByTotalPurchasesDescending; 
. . . 
itemTotalsAcrossMonthsListSortedByTotalPurchasesDescending = (List<ItemTotalsAcrossMonths>)itemTotalsAcrossMonthsList.OrderByDescending(x => x.TotalPurchases13); 

...但结果是异常相似。

我需要做些什么来排序通用列表?

+4

您缺少'ToList()'调用。 – MarcinJuraszek

回答

3

你错过了ToList()调用。

LINQ方法返回IEnumerable<T>而不是List<T>,所以你不能假定接口的实现可转换为List<T>

您可以在LINQ查询中调用ToList()以获得结果列表。

1

OrderByDescending返回OrderedEnumerable。您的类型是List。只需在OrderByDescending之后拨打ToList()即可恢复您的类型。

1

OrderByDescending方法是一种LINQ方法。一般来说,LINQ在IEnumerable s上工作,而不是List s。您需要使用ToList()方法创建IEnumerable列表中的方法:

itemTotalsAcrossMonthsList.OrderByDescending(x => x.TotalPurchases13).ToList(); 
+0

列表不是IEnumerable吗? –

+0

@PeterSchneider一个'List'是一个'IEnumerable',但是从LINQ扩展方法返回的'IEnumerable'不是'List'。 –

+0

哦,我明白你的意思了 - Linq在*上工作,并在* IEnumerables中得到结果。诚然,这是有道理的。 –