この状況では:
var allCustomers = from c in customers select c;
var oldCustomers = from o in allCustomers where o.age > 70 select o;
where句はデータベースに到達しますか?
この状況では:
var allCustomers = from c in customers select c;
var oldCustomers = from o in allCustomers where o.age > 70 select o;
where句はデータベースに到達しますか?
私はあなたが意味すると思います:
var oldCustomers = from o in allCustomers where o.age > 70 select o;
はい、データベースに到達します。
LINQPad を使用して、生成された SQL コードを確認してみてください。次に例を示します。
次のフィールドを持つActor
テーブルがあります。
Id | Name | Age
コード:
var x = from c in Actors where c.Name.Contains("a") select c;
var y = from c in x where c.Age > 0 select c;
に翻訳されます:
-- Region Parameters
DECLARE @p0 Int = 0
DECLARE @p1 NVarChar(3) = '%a%'
-- EndRegion
SELECT [t0].[Id], [t0].[Name], [t0].[Age]
FROM [Actor] AS [t0]
WHERE ([t0].[Age] > @p0) AND ([t0].[Name] LIKE @p1)
2 つのクエリが 1 つのクエリにどのように混在しているかがわかります。
IEnumerables は遅延であるため、それらの要素を知る必要がない限り (それらを反復するため、または.Count()
アイテムの数を確認するためなど)、クエリ/操作を実行しません。