无法比较数组中的两个元素。至少一个对象必须实现IComparable

时间:2019-02-05 15:26:39

标签: c# .net linq

下面是我尝试获取用户的所有客户端和角色的代码,只是最新的版本记录。所以下面的输出是..这在下面的独立模式下可以正常工作,但是当我在.net核心2.1.x上的项目中添加此代码时,它给出错误“无法比较数组中的两个元素。\ r \ n至少一个对象必须实现IComparable“,如何修复它,有何建议?

Solution #1
4 VIEW 1
3 ADMIN 2

代码

using System;
using System.Linq;
public class Simple {
  public static void Main() {
            var userRoles = (new[] 
            { 
            new { clientid=1 , rowVersion = 1 , role="READ" },
            new { clientid=1 , rowVersion = 2 , role="EDIT" },
            new { clientid=2 , rowVersion = 3 , role="ADMIN" },
            new { clientid=1 , rowVersion = 4 , role="VIEW" }
        });


      var results = userRoles.GroupBy(x => x.clientid)
                  .Select(x => x.OrderByDescending(y => y.rowVersion).First());


      Console.WriteLine("Solution #1");

      foreach (var k in results)
        {
            Console.WriteLine("{0} {1}", k.rowVersion, k.role, k.clientid);
        }

  }
  }

更新 得到了下面添加为答案的解决方案。

RootCause为“匿名类型不可顺序比较”。

1 个答案:

答案 0 :(得分:0)

以下是上述问题的有效解决方案。问题是“匿名类型不能与订单进行比较。”

 var results = userRoles
                       .OrderByDescending(y => y.rowVersion)
                       .GroupBy(x => x.clientid)
                       .SelectMany(x => x.Take(1));

这一切都很好。