如何为Linq to Entities OrderBy()实现等效的自定义IComparer?
Linq to Entities不支持自定义比较器MSDN documentation states:
LINQ to Entities支持大多数LINQ排序方法,但接受
IComparer
的方法除外,因为比较器无法转换为数据源。有关详细信息,请参阅Standard Query Operators in LINQ to Entities Queries。
答案 0 :(得分:1)
如果要使用自定义IComparer
,首先需要问自己是否可以在数据库中进行排序。如果不是,只需在序列上调用AsEnumerable
,然后在服务器上对其进行排序。
如果您可以(并且想要)在数据库中对其进行排序,那么您需要考虑需要进行哪些转换以便进行排序。如果您有复杂的转换,可以将其编写为SQL函数,并将其添加到数据上下文中:
from e in context.Entities
let hours = context.Get32HourValue(e.Time)
orderby hours
select e