我现在已经挣扎了一段时间。我想要做的就是OrderBy由关系树中第3个孩子的Count()记录列表。我将尝试绘制下面涉及的3个表,对不起,如果我不使用stackoverflow标准:
网站---->角色---->权限
简而言之,一个网站可以有超过1个角色,一个角色可以有超过1个权限。所以它是一对多的。
当我尝试类似的事情时:
List<Website> websites = Model.WebsiteOptions.OrderBy( o => o.Roles.OrderBy( r => r.RolePermissions.Count ) ).ToList();
我收到的错误很明显:
至少有一个对象必须实现IComparable。
但我仍然不知道如何通过每个角色拥有的权限数量来订购网站...我想要的是那些拥有最多权限的角色的网站。
请有人知道或给我一些指导吗?
提前致谢。
答案 0 :(得分:1)
您收到该错误,因为在OrderBy
中您应该指定如何订购集合 - 这意味着提供实现IComparable
的对象。
在您的实现中,您实际上正在提供另一个已排序的集合(尽管这是无关紧要的)。 IEnumerable<T>
没有实现IComparable<IEnumerable<T>>
,只有IComparable<T>
- 它可以比较2&#34;简单&#34;物品,但不是两个集合。 (你会用多少元素来做?最大的元素?它是通用的,所以最大的甚至是什么意思.....)
尝试类似:
List<Website> websites = Model.WebsiteOptions.OrderBy( o => o.Roles.Max( r => r.RolePermissions.Count ) ).ToList();
这将通过具有最高RolePermissions计数
的选项对您的Website
进行排序