为什么这是一个无效的LINQ演员?

时间:2015-11-06 22:12:03

标签: c# linq generics generic-list iorderedenumerable

我将原始数据放入通用列表中。然后,我将从原始数据计算的数据放入另一个通用列表中,这一个:

private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsList;

数据(原始数据和计算数据)需要显示排序,按总购买量排序,因此我希望数据按此方式排序。由于订购通用列表会返回另一个通用列表,我首先尝试将已排序的数据重新分配到原始通用列表中:

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

......但是我所走的道路显然是出于良好的意图,因为这个码头炸弹在我脸上爆炸:

enter image description here

我尝试将val放入相同类型的单独通用列表中:

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

......但结果非常相似。

如何对通用列表进行排序?

3 个答案:

答案 0 :(得分:3)

你缺少ToList()调用。

LINQ方法返回IEnumerable<T>,而不是List<T>,因此您不能假设接口的实现可以转换为List<T>

您可以在LINQ查询上调用ToList()以获取包含结果的列表。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

OrderByDescending方法是LINQ方法。通常,LINQ适用于IEnumerable s,而非List s。您需要使用IEnumerable方法从ToList()创建一个列表:

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