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 ?

LINQ - order使用子集合,条件参数异常

您可能希望在第一个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());