链接列表中的Linq OrderBy计数
本文关键字:OrderBy 计数 Linq 列表 链接 | 更新日期: 2023-09-27 17:57:56
我已经挣扎了一段时间。我所要做的就是按关系树中第三个孩子的Count()列出一个记录列表。我将尝试绘制下面涉及的3张表,如果我不使用堆叠式流动标准,很抱歉:
网站---->角色---->权限
换句话说,一个网站可以有1个以上的角色,一个角色可以有一个以上的权限。所以这是一对多。
当我尝试类似的东西时:
List<Website> websites = Model.WebsiteOptions.OrderBy( o => o.Roles.OrderBy( r => r.RolePermissions.Count ) ).ToList();
我得到一个很清楚的错误:
必须至少有一个对象实现IComparable。
但我仍然不知道如何通过每个角色的权限数量来订购网站。。。我想要的是让拥有最多权限的角色的网站排在第一位。
请有人知道或给我一些指导吗?
提前谢谢。
您之所以会出现此错误,是因为在OrderBy
中,您应该指定如何对集合进行排序,这意味着提供一个实现IComparable
的对象。
在您的实现中,您实际上提供了另一个已排序的集合(尽管这无关紧要)。IEnumerable<T>
不实现IComparable<IEnumerable<T>>
,而只实现IComparable<T>
——它可以比较2个"简单"项,但不能比较两个集合。(你会根据元素的数量来做吗?…最大的元素?它是通用的,所以最大的意思是什么……)
试试类似的东西:
List<Website> websites = Model.WebsiteOptions.OrderBy( o => o.Roles.Max( r => r.RolePermissions.Count ) ).ToList();
这将按照RolePermissions计数最高的选项对Website
进行排序