DbSortClause表达式必须具有可比较顺序的类型名称:Key我使用Linq实体我有以下查询IQueryableuserResult=userResult.OrderBy(u=>u.UserClientRoles.OrderBy(r=>r.Role.RoleName));但是我得到了DbSortClauseexpressionmusthaveComparabletypeparametername:key错误,它返回0colletction。对此有任何想法。.OrderBy(),在处理数据库时,应该接受一个委托,该委托只返回表示数据库中一列的单个属性。我不确定您要做什么,但看起来u.UserClientRoles.OrderBy(r=>r.Role.RoleName)将返回无法排序的枚举值。我有同样的问题,我用这个解决了它:你的代码:IQueryableuserResult=userResult.OrderBy(u=>u.UserClientRoles.OrderBy(r=>r.Role.RoleName));我的代码:Listresults=newList();结果.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)。附加信息:我使用一个非官方的简单概念/含义来解释一个简单单词的复杂解决方案,这意味着您可能无法通过使用此“答案”中使用的单词/概念在网络上找到类似的帖子。否则,代码本身可以正常工作,您不应该通过自己应用和/或修改它来解决任何问题。祝你好运!!!(^_^)就我而言,我不小心尝试按对象而不是其属性之一进行排序。您应该在BarorderbyFoo.PropertyNameselectFoo中使用varquery=fromFoo;而不是varquery=fromFooinBarorderbyFooselectFoo;注意:如果您对Foo的ToString()方法事件进行覆盖,您将获得相同的行为。以上就是C#学习教程:DbSortClauseexpressionmusthaveatypenameinacompariableorder:Key分享的所有内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
