【发布时间】:2014-05-28 05:33:07
【问题描述】:
我在尝试对我的 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?
【问题讨论】:
-
您能举例说明您的确切排序要求吗?您想对您的
Item集合或项目中的值进行排序吗?我认为您想根据某些Item.CustomFieldValue对您的Item集合进行排序,但是哪些值和哪些值在前? -
我有可查询的项目,该项目包含 CustomFieldValue 的集合。假设我们有 5 个项目,每个项目在 CustomFieldValue 集合中都有 5 个字段 [defId 为 1,2,3,4,5]。我需要让它按 CustomFieldValue 中具有指定 DefinitionId 的字段进行排序。所以例如我需要通过 CustomFieldValue.Value 订购项目,其中 defId=3 ....希望我让事情变得更明亮
标签: c# linq entity-framework linq-to-entities