这个问题(LINQ and a natural sort order…)讨论了如何使用IComparer在Linq中实现自然排序。我以前使用IEnumerables成功地使用了这个,但是我无法在Linq-to-SQL表达式中使用它。这是因为Linq-to-SQL不支持带有IComparer的.OrderBy()的特定重载?
如果确实如此,是否有任何实际的解决方法?
答案 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()方法来调用执行,然后在内存中对其进行排序。这种实用性取决于数据的大小以及您希望获取的数据量(例如实现分页时)。