【问题标题】:At least one object must implement IComparable error in linq query至少一个对象必须在 linq 查询中实现 IComparable 错误
【发布时间】:2014-02-25 23:27:26
【问题描述】:
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。”,谁能解释我为什么会收到此错误?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

    我相信你想选择最高薪水:

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

    【讨论】:

    • 感谢您的更正,但是一旦我用您给出的 lamda 表达式替换后我没有收到错误,那么这里的类型 Icomparable 点在哪里?我想知道 linq 排序与 sql 排序相比 Icomparable 背后的故事,你能帮我理解一下吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多