LINQ - order使用子集合,条件参数异常
本文关键字:条件 参数 异常 子集合 order LINQ | 更新日期: 2023-09-27 18:05:26
我遇到麻烦试图排序我的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 ?
您可能希望在第一个OrderBy
的末尾使用FirstOrDefault()
,这样您就不会处理枚举值,而是处理值。
queryable = queryable
.OrderBy(p => p.CustomFieldValue
.Where(p2 => p2.DefinitionID == defId)
.Select(p3 => p3.Value)
.OrderBy(p4 => p4)
.FirstOrDefault()
);
修改Joanvo的答案成功了,这是工作代码[我已经删除了内部OrderBy]
queryable = queryable.OrderBy(p => p.CustomFieldValue.Where(p2 => p2.DefinitionID == defId).Select(p3 => p3.Value).FirstOrDefault());