Linq OrderBy Count In 链表

Linq OrderBy Count In linked list

我已经挣扎了一段时间了。我想要做的就是按关系树中第 3 个 child 的 Count() 的记录列表排序。下面涉及到的3张表我会尝试画出来,如果我没有使用Whosebug标准请见谅:

网站 ----> 角色 ----> 权限

换句话说,一个网站可以有1个以上的角色,一个角色可以有1个以上的权限。所以这是一个 1-to-many.

当我尝试这样的事情时:

List<Website> websites = Model.WebsiteOptions.OrderBy( o => o.Roles.OrderBy( r => r.RolePermissions.Count ) ).ToList();

我收到一个非常清楚的错误:

At least one object must implement IComparable.

但我仍然不知道如何根据每个角色拥有的权限数量对网站进行排序...我想要的是具有最多权限的角色的网站排在第一位。

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

提前致谢。

你得到那个错误是因为在你的 OrderBy 中你应该指定如何排序集合 - 这意味着提供一个实现 IComparable 的对象。

在您的实现中,您实际上提供了另一个已排序的集合(尽管这无关紧要)。 IEnumerable<T> 不实现 IComparable<IEnumerable<T>> 而只是 IComparable<T> - 它可以比较 2 "simple" 项但不能比较两个集合。 (你会根据元素的数量来做吗?..最大的元素?它是通用的,所以最大的甚至是什么意思......)

试试这样的东西:

List<Website> websites = Model.WebsiteOptions.OrderBy( o => o.Roles.Max( r => r.RolePermissions.Count ) ).ToList();

这将按照具有最高 RolePermissions 计数的选项对您的 Website 进行排序