2

是否有概览显示或解释了必须调用 Linq 方法的顺序?

例如,如果您先调用Take(200)然后OrderBy(..). 但是,当您切换这些呼叫时,您不会遇到异常。

所以我的问题是,有人知道一些解释这一点的文档吗?或者知道列出此类信息的地方?

4

2 回答 2

2

调用它们的顺序没有限制。在 LINQ中调用Take(200)后跟是完全有效的。OrderByLINQ 无非就是一系列方法;它没有描述这些方法是如何实际实现的。一些实际的实现包括 Linq-to-objects(有点特殊)、LINQ-To-SQL、实体框架,然后是基于IQueryableLINQ 方法的任意数量的其他查询提供程序。

某些特定的提供程序可能只支持 LINQ 方法的子集,或者可能不支持 LINQ 可以描述的某些其他方面。在这些情况下,他们可能会出错(或做一些其他不良行为)。您将需要查看您正在使用的任何特定 LINQ 提供程序的文档,以了解它支持和不支持的内容。

于 2012-09-14T14:02:35.007 回答
2

在调用 OrderBy 之前不能调用 Take(200) 的原因是 Take(200) 强制 NHibernate LINQ 提供程序评估 linq 查询。一旦查询被评估,它就不能在不重新评估查询的情况下添加更多的 SQL 子句,这可能会产生意想不到的后果。

于 2012-09-14T14:06:54.577 回答