Linq OrderBy Count In链表

时间:2016-07-20 13:58:23

标签: c# linq-to-sql entity-framework-4

我现在已经挣扎了一段时间。我想要做的就是OrderBy由关系树中第3个孩子的Count()记录列表。我将尝试绘制下面涉及的3个表,对不起,如果我不使用stackoverflow标准:

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

简而言之,一个网站可以有超过1个角色,一个角色可以有超过1个权限。所以它是一对多的。

当我尝试类似的事情时:

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

我收到的错误很明显:

  

至少有一个对象必须实现IComparable。

但我仍然不知道如何通过每个角色拥有的权限数量来订购网站...我想要的是那些拥有最多权限的角色的网站。

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

提前致谢。

1 个答案:

答案 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进行排序