Я думаю, что вы имеете в виду:
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()
, чтобы увидеть, сколько элементов и т. Д.), Он не будет выполнять какой-либо запрос / работа.