如何为Linq to Entities OrderBy()实现自定义IComparer的等效功能?

时间:2012-05-17 21:20:26

标签: linq-to-entities sql-order-by icomparer

如何为Linq to Entities OrderBy()实现等效的自定义IComparer?

Linq to Entities不支持自定义比较器MSDN documentation states

  

LINQ to Entities支持大多数LINQ排序方法,但接受IComparer的方法除外,因为比较器无法转换为数据源。有关详细信息,请参阅Standard Query Operators in LINQ to Entities Queries

1 个答案:

答案 0 :(得分:1)

如果要使用自定义IComparer,首先需要问自己是否可以在数据库中进行排序。如果不是,只需在序列上调用AsEnumerable,然后在服务器上对其进行排序。

如果您可以(并且想要)在数据库中对其进行排序,那么您需要考虑需要进行哪些转换以便进行排序。如果您有复杂的转换,可以将其编写为SQL函数,并将其添加到数据上下文中:

from e in context.Entities
let hours = context.Get32HourValue(e.Time)
orderby hours
select e