首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >键表达式的类型必须是顺序可比参数名称: DbSortClause

键表达式的类型必须是顺序可比参数名称: DbSortClause
EN

Stack Overflow用户
提问于 2012-01-05 15:13:08
回答 3查看 22K关注 0票数 18

我正在使用Linq to entity,并有以下查询

代码语言:javascript
复制
IQueryable<DomainModel.User> userResult = 
      userResult.OrderBy(u => u.UserClientRoles.OrderBy(r => r.Role.RoleName));

但是我得到了这个错误

DbSortClause表达式必须具有顺序可比的类型

参数名称:Key

并返回一个空集合。

知道是怎么回事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-05 15:43:54

在处理数据库时,.OrderBy()应该接受一个委托,该委托只返回一个表示数据库中某一列的属性。我不知道你想做什么,但看起来

代码语言:javascript
复制
u.UserClientRoles.OrderBy(r => r.Role.RoleName)

将返回值的枚举,该值不能排序。

票数 24
EN

Stack Overflow用户

发布于 2013-06-19 23:05:28

我也有同样的问题,我用这个解决了它:

你的代码:

IQueryable<DomainModel.User> userResult = userResult.OrderBy(u => u.UserClientRoles.OrderBy(r => r.Role.RoleName));

我的代码:

List<Membership> results = new List<Membership>(); results.AddRange(memberships.OrderBy(m => m.Roles)); memberships = results.AsQueryable();

巧合:

*.OrderBy(m => m.Roles)

解决方案:

*.OrderBy(m => m.Roles.Select(r => r.RoleId).FirstOrDefault())

可能出现问题的原因:

也许,您做了我所做的事情,并导致1个用户/成员在同一成员中可以有多个角色。这造成了与OrderBy()的冲突,因为应用程序一次只能对单个元素进行“排序”,当她调用角色(这是元素的ICollection )时,她会收到超过1个没有任何优先级级别的元素(即使我们可以假设应用程序会将角色的索引作为优先级的基本级别,但实际上并不是这样)。

解决方案的解释:

当您添加*.Select(r => r.RoleId)时,您是在向应用程序指定哪个元素将用于OrderBy()。但是,当您可能到达这一点时,您将看到,仅仅使用*.Select(r => r.RoleId)可能是不够的,因为应用程序仍然接收具有相同优先级的多个结果。添加*.Select(r => r.RoleId).FirstOrDefault()你基本上就是在说:"...I不关心你从那个元素得到了多少结果,只关注第一个结果,或者按它的默认顺序排序……“(默认值通常表示空或NULL)。

其他信息:

我使用了非官方的简单概念/含义,用简单的单词解释了一个复杂的解决方案,这意味着你可能会在使用这个“答案”中使用的单词/概念在网络上找到类似的帖子时遇到问题。否则,代码本身就会正常工作,您可以自行应用和/或修改它,这应该不会有任何问题。祝你好运!(^_^)

票数 11
EN

Stack Overflow用户

发布于 2017-02-15 18:45:25

在我的例子中,我无意中尝试按对象排序,而不是按它的一个属性排序。

你应该使用

代码语言:javascript
复制
var query = from Foo in Bar
            orderby Foo.PropertyName
            select Foo;

而不是

代码语言:javascript
复制
var query = from Foo in Bar
            orderby Foo
            select Foo;

注意:如果在FooToString()方法上有覆盖,您将获得相同的行为事件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8738887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档