IQueryable
以下のコードの最終的な出力はどちらも同じだが、裏側で実行される処理は異なる。
var q =
from c in dbContext.Customers
where c.City == "London"
select c;
var finalAnswer = from c in q
orderby c.Name
select c;
// Code to iterate the final Answer sequence elided
var q =
(from c in dbContext.Customers
where c.City == "London"
select c).AsEnumerable();
var finalAnswer = from c in q
orderby c.Name
select c;
// Code to iterate final Answer elided.
前者では、LINQ to SQLライブラリによって2つのLINQを合成してSQLが生成され、SQLが一度だけ実行される。後者では、はじめのLINQから生成されたSQLの実行後、その結果を使用して2番めのLINQがLINQ to Objectsによって実行される。多くの場合、IQueryable
IEnumerableAsQueryable()
メソッドである。
public static IEnumerable<Product>
ValidProducts(this IEnumerable<Product> products) =>
from p in products.AsQueryable()
where p.ProductName.LastIndexOf('C') == 0
select p;