Vai*_*ukh 17 c# entity-framework
我使用Linq实体我有以下查询
IQueryable<DomainModel.User> userResult =
userResult.OrderBy(u => u.UserClientRoles.OrderBy(r => r.Role.RoleName));
Run Code Online (Sandbox Code Playgroud)
但我得到了
DbSortClause表达式必须具有可比较的类型
参数名称:密钥
错误,它返回0 colletction.
对此有任何想法.
Mic*_*oon 24
.OrderBy()在处理数据库时,应该接受一个只返回表示数据库中一列的单个属性的委托.我不确定你要做什么,但它看起来像
u.UserClientRoles.OrderBy(r => r.Role.RoleName)
Run Code Online (Sandbox Code Playgroud)
将返回无法排序的值枚举.
小智 9
我有同样的问题,我用这个解决了它:
你的代码:
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()发生冲突,因为应用程序当时只能"命令"一个元素,当她调用Role(这是元素的ICollection)时,而是接收多个元素而没有任何优先级的元素级别(即使我们可以假设应用程序将角色的索引作为优先级的基本级别,实际上它不会).
解决方案的解释:
添加时*.Select(r => r.RoleId),您将指定应用程序将哪个元素用于OrderBy().但是,正如您将在此时看到的那样,仅仅通过使用*.Select(r => r.RoleId)可能是不够的,因为应用程序仍然接收具有相同优先级的多个结果.添加*.Select(r => r.RoleId).FirstOrDefault()你基本上是这样说:"......我不关心从这个元素收到多少结果,只关注第一个结果,或按默认顺序排序......"(默认通常表示EMPTY或NULL) .
附加信息:
我使用非官方的简单概念/含义来解释一个简单单词的复杂解决方案,这意味着您可能有问题通过使用此"答案"中使用的单词/概念在Web中找到类似的帖子.否则,代码本身可以正常工作,您不应该通过自己应用和/或修改它来解决任何问题.祝好运!!!(^_^)
| 归档时间: |
|
| 查看次数: |
19105 次 |
| 最近记录: |