为什么这是一个无效的 LINQ 转换?

Why is this an invalid LINQ cast?

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

private List<ItemTotalsAcrossMonths> itemTotalsAcrossMonthsList;

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

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

...但我走的路显然是用善意铺成的,因为这个代码边炸弹在我面前爆炸:

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

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

...但结果却出奇地相似。

我需要做什么来对通用列表进行排序?

您缺少 ToList() 调用。

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

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

OrderByDescending returns 一个 OrderedEnumerable。您的类型是 List。只需在 OrderByDescending 之后调用 ToList() 即可返回您的类型。

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

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