这个问题(LINQ and a natural sort order…)讨论了如何使用IComparer在Linq中实现自然排序。我以前用IEnumerables成功地使用了它,但是我无法使它在Linq-to-SQL表达式中工作。这是否因为采用IComparer的.OrderBy()的特定重载不被Linq-to-SQL支持?可以在Linq-to-SQL中的.OrderBy()中使用IComparer吗?
如果事实确实如此,是否有任何实际的解决方法?
这个问题(LINQ and a natural sort order…)讨论了如何使用IComparer在Linq中实现自然排序。我以前用IEnumerables成功地使用了它,但是我无法使它在Linq-to-SQL表达式中工作。这是否因为采用IComparer的.OrderBy()的特定重载不被Linq-to-SQL支持?可以在Linq-to-SQL中的.OrderBy()中使用IComparer吗?
如果事实确实如此,是否有任何实际的解决方法?
并不是说不支持IComparer,而是在Linq-to-Sql中,必须将OrderBy()转换为T-Sql操作。如果它允许你指定比较标准,那么它后面的C#代码必须由SQL服务器执行才能使用它。
如果您需要在Linq-To-Sql中执行某些不受支持但可以在T-SQL中完成的操作,则可以使用存储过程来解决该问题,该存储过程可与Linq-to- SQL语句。如果不方便,可以调用ToList()方法来调用执行,然后在内存中对其进行排序。这种实用性取决于数据的大小以及您希望获取的数据量(例如在执行分页时)。
是的。 Linq-to-SQL将您的lambda表达式直接转换为sql,因此显然无法处理任意代码。您可以使用ToList()
强制执行查询,然后在该列表上执行您的OrderBy
。
谢谢,这是我非常有信心的答案。不过,一个人总是希望。 – 2010-09-14 22:31:11