我可以在Linq-to-SQL中的.OrderBy()中使用IComparer吗?

时间:2010-09-14 22:22:46

标签: c# linq linq-to-sql

这个问题(LINQ and a natural sort order…)讨论了如何使用IComparer在Linq中实现自然排序。我以前使用IEnumerables成功地使用了这个,但是我无法在Linq-to-SQL表达式中使用它。这是因为Linq-to-SQL不支持带有IComparer的.OrderBy()的特定重载?

如果确实如此,是否有任何实际的解决方法?

2 个答案:

答案 0 :(得分:1)

是。 Linq-to-SQL将您的lambda表达式直接转换为sql,因此它显然无法处理任意代码。您可以使用ToList()强制执行查询,然后在该列表上执行OrderBy

答案 1 :(得分:1)

不是不支持IComparer,而是在Linq-to-Sql中,必须将OrderBy()转换为T-Sql操作。如果它允许您指定比较的标准,那么它背后的C#代码必须由SQL服务器执行才能使用它。

如果你需要在Linq-To-Sql中做一些不受支持但可以在T-SQL中完成的事情,你总是可以通过使用一个存储过程来解决它,它可以很好地与Linq-to-Sql一起工作。如果不方便,可以调用ToList()方法来调用执行,然后在内存中对其进行排序。这种实用性取决于数据的大小以及您希望获取的数据量(例如实现分页时)。