是否有某个概述在哪里显示或解释必须调用Linq方法的顺序?
例如,如果您先拨打Take(200)
然后再OrderBy(..)
,则会收到例外情况。但是当你切换这些电话时,你不会得到例外。
所以我的问题是,有人知道一些文件解释了吗?或者知道列出这种信息的地方?
答案 0 :(得分:2)
对于可以调用的顺序没有限制。在LINQ中调用Take(200)
后跟OrderBy
是完全有效的。 LINQ只不过是一系列方法;它没有描述这些方法是如何实际实现的。一些实际的实现包括Linq-to-objects(有点特殊情况),LINQ-To-SQL,Entity Framework,以及基于IQueryable
LINQ方法的任意数量的其他查询提供程序。
某些特定提供程序可能只支持LINQ方法的子集,或者可能不支持LINQ可以描述的其他方面。在这些情况下,他们可能会出错(或做一些其他不良行为)。您将需要查看您正在使用的任何特定LINQ提供程序的文档,以查看它的功能和不支持。
答案 1 :(得分:2)
在调用OrderBy之前无法调用Take(200)的原因是Take(200)强制NHibernate LINQ提供程序评估linq查询。一旦评估了查询,它就无法在不重新评估查询的情况下向混合中添加更多SQL子句,这可能会产生意想不到的后果。