我遇到麻烦,试图对我的EF实体的IQueryable进行排序。
我的对象结构是这样的:
Item
Item.CustomFieldValue [List<CustomFieldValue>]
Item.CustomFieldValue.DefinitionID
Item.CustomFieldValue.Value
我正在使用
IQueryable<Item>
我需要有条件地对它进行排序,其中具有所需定义id的值首先按如下方式排序:
queryable = queryable
.OrderBy(p => p.CustomFieldValue
.Where(p2 => p2.DefinitionID == defId)
.Select(p3 => p3.Value)
.OrderBy(p4 => p4)
);
然而抛出ArgumentException“DbSortClause表达式必须具有可比较的类型。”。
我确实理解试图对我说的异常是什么,我无法弄清楚如何更改它以便生成有效的查询。
任何帮助非常感谢
编辑:
为了更多地解决这个问题,我希望实现与此查询类似的功能
SELECT * FROM ticketnumber t, customfieldvalue c
WHERE t.id like '%00000047%' and c.ticketnumberid = t.id
ORDER BY CASE
WHEN DefinitionId = 2125 THEN 1
ELSE 2
END, c.Value ASC
或者,随着时间开始成为我的一个因素,有没有办法以字符串形式附加OrderBy?
答案 0 :(得分:1)
您可能希望在第一个FirstOrDefault()
结束时使用OrderBy
,因此您不会使用值来处理枚举。
queryable = queryable
.OrderBy(p => p.CustomFieldValue
.Where(p2 => p2.DefinitionID == defId)
.Select(p3 => p3.Value)
.OrderBy(p4 => p4)
.FirstOrDefault()
);
答案 1 :(得分:0)
修改Joanvo的答案就行了,这就是工作代码[我删除了内部的OrderBy]
queryable = queryable.OrderBy(p => p.CustomFieldValue.Where(p2 => p2.DefinitionID == defId).Select(p3 => p3.Value).FirstOrDefault());