2015-11-06 95 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中得到結果。誠然,這是有道理的。 –