2014-02-25 63 views
0
var pairs = new [] { new { id = 1, name = "ram", dept = "IT", sal = "3000" }, new { id = 2, name = "ramesh", dept = "IT", sal = "5000" }, new { id = 3, name = "rahesh", dept = "NONIT", sal = "2000" }, 
          new { id = 5, name = "rash", dept = "NONIT", sal = "7000" } }; 
     var query = from stud in pairs 
        where (stud.name.StartsWith("r") && stud.id % 2 != 0) 
        //orderby stud.sal descending 
        group stud by stud.dept into grps 
        select new { Values = grps, Key = grps.Key, maxsal=grps.Max() }; 
        ////select new { id = stud.id }; 

     foreach (dynamic result in query) 
     { 
      Console.WriteLine(result.Key); 
      Console.WriteLine(result.maxsal); 
      foreach (dynamic result2 in result.Values) 
      { 
       Console.WriteLine(result2.id + "," + result2.sal); 
      } 


     } 
     Console.Read(); 

我得到錯誤「至少有一個對象必須實現IComparable。」,有人可以解釋我爲什麼iam我得到這個錯誤?至少有一個對象必須在linq查詢中實現IComparable錯誤

回答

4

您正在致電grps.Max()以獲取組中的最大項目。你的匿名對象不具有可比性。 Linq如何知道哪一個最大?它應該使用id屬性進行比較,還是name

我相信你要選擇最高月薪:

maxsal = grps.Max(s => Int32.Parse(s.sal)) 
+0

感謝您的修正,但一旦我用你給的LAMDA表達式替換我沒有錯誤,那麼,是tyepe IComparable的點那麼呢?我想知道與SQL排序相比,linq排序的Icomparable背後的故事,你能幫助我理解它嗎? – Shekar

相關問題