Linq последнее поведение обработки - PullRequest
2 голосов
/ 22 мая 2011

В этой ситуации:

var allCustomers = from c in customers select c;
var oldCustomers = from o in allCustomers where o.age > 70 select o;

Будет ли где предложение достигнет базы данных?

1 Ответ

2 голосов
/ 22 мая 2011

Я думаю, что вы имеете в виду:

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)

чтобы вы могли видеть, как он смешивает два запроса только в одном.

Помните, IEnumerables ленивы, поэтому если вы не должны знать их элементы (потому что вы просматриваете их, или потому что вы делаете .Count(), чтобы увидеть, сколько элементов и т. Д.), Он не будет выполнять какой-либо запрос / работа.

...