2015-04-05 49 views
0

對於按日期按月份和年份對列表進行分組,然後按日期對子組進行排序的LINQ查詢,我遇到了一些問題。編譯器告訴我,它不能評估類型參數,我非常困惑與所有的IGrouping,IOrderedEnumerable,IEnumerable的東西,我不能評估他們都不...編譯器無法評估LINQ查詢中的類型參數

該問題發生在groupedList.OrderBy(...)行。

public IOrderedEnumerable<IGrouping<String, Asset>> DateAssetList 
{ 
    get 
    { 
     return AssetManager.Instance.AllAssets. 
      GroupBy(asset => ConverterHelper.GetMonthNameByIndex(asset.EntryDate.Month) + " " + asset.EntryDate.Year). 
      Select(groupedList => groupedList.OrderBy(asset => asset.EntryDate, new DateComparer())). 
      OrderBy(group => group.Key, new DateComparer()); 
    } 
} 

AllAssetsAsset類型的列表。

EntryDateDateTime的類型。

第一個GroupBy聲明基本上按月份和年份劃分所有資產(例如2015年3月)。現在我的任務是對2015年3月份的子組中的所有資產進行排序,但我無法使查詢工作。

有人能爲我解開這個謎嗎?

編輯:添加DateComparer類

public class DateComparer : IComparer<String> 
{ 
    public int Compare(string x, string y) 
    { 
     if (DateTime.Parse(x) > DateTime.Parse(y)) 
      return -1; 

     if (DateTime.Parse(x) < DateTime.Parse(y)) 
      return 1; 

     return 0; 
    } 
} 
+0

什麼不起作用? – 2015-04-05 00:52:32

+0

編譯器無法在'groupedList.OrderBy(...)'語句的'Select(..)'行中計算類型參數。他希望我明確指定它們,但我無法做到這一點。 – xmashallax 2015-04-05 00:55:28

+0

你期待什麼回報(用你自己的話說,而不是技術描述)。現在,您正在返回一組組。 – 2015-04-05 01:07:45

回答

0

你DataComparer不是日期時間的比較器,但字符串的比較器,你說你的EntryDate已經是一個DateTime,所以它是沒有意義的使用字符串的比較器比較datetimes,基本上你只需要刪除第二個參數

在所有情況下,比較器似乎沒有任何用處,並且最好被刪除,因爲它不添加任何比較邏輯,它沒有比只需要在需要時進行內聯解析(而在這裏你不需要它),而不是傳遞一個傳達的比較器s「我們正在做一些自定義比較」的消息

+0

你說得對,我有點沒腦子了...查詢仍然無法正常工作,但我得到了錯誤修正,我要求:) – xmashallax 2015-04-05 01:56:01