下面是我尝试获取用户的所有客户端和角色的代码,只是最新的版本记录。所以下面的输出是..这在下面的独立模式下可以正常工作,但是当我在.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为“匿名类型不可顺序比较”。
答案 0 :(得分:0)
以下是上述问题的有效解决方案。问题是“匿名类型不能与订单进行比较。”
var results = userRoles
.OrderByDescending(y => y.rowVersion)
.GroupBy(x => x.clientid)
.SelectMany(x => x.Take(1));
这一切都很好。