链接列表中的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。

但我仍然不知道如何通过每个角色的权限数量来订购网站。。。我想要的是让拥有最多权限的角色的网站排在第一位。

请有人知道或给我一些指导吗?

提前谢谢。

链接列表中的Linq OrderBy计数

您之所以会出现此错误,是因为在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进行排序