Вопрос

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

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

Воля где пункт достигает базы данных?

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top