C# linq查询中必须至少有一个对象实现IComparable错误

C# linq查询中必须至少有一个对象实现IComparable错误,c#,linq,C#,Linq,我收到错误“至少有一个对象必须实现IComparable”。有人能解释我为什么会收到此错误吗?您正在调用grps.Max()以获取组中的maximnum项。您的匿名对象是不可比较的。Linq如何知道哪一个是最大值?它应该使用id属性进行比较,还是使用name 我相信您希望选择最高工资: var pairs = new [] { new { id = 1, name = "ram", dept = "IT", sal = "3000" }, new { id = 2, name = "ramesh

我收到错误“至少有一个对象必须实现IComparable”。有人能解释我为什么会收到此错误吗?

您正在调用
grps.Max()
以获取组中的maximnum项。您的匿名对象是不可比较的。Linq如何知道哪一个是最大值?它应该使用
id
属性进行比较,还是使用
name

我相信您希望选择最高工资:

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();

您正在调用
grps.Max()
以获取组中的maximnum项。您的匿名对象是不可比较的。Linq如何知道哪一个是最大值?它应该使用
id
属性进行比较,还是使用
name

我相信您希望选择最高工资:

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();

谢谢你的更正,但是我用你给出的lamda表达式替换后没有得到错误,那么tyepe Icomparable的意义在哪里呢?我想知道linq排序的Icomparable与sql排序的比较背后的故事,你能帮我理解sameThanks以进行更正吗,但是我在用你给出的lamda表达式替换后没有得到错误,那么tyepe Icomparable的意义在哪里呢?我想知道Icomparable for linq排序与sql排序之间的区别,你能帮我理解吗