/ / Linq último comportamento de processamento - .net, banco de dados, linq, orm, late-binding

Linq último comportamento de processamento - .net, banco de dados, linq, orm, late-binding

Nesta situação:

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

Vai Onde cláusula alcance banco de dados?

Respostas:

2 para resposta № 1

Eu acho que você quer dizer:

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

E sim, vai chegar ao banco de dados.

Tente usar o LINQPad para ver o código SQL gerado. Aqui está um exemplo:

eu tenho um Actor tabela que possui os campos:

Id | Name | Age

O código:

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;

é traduzido para:

-- 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)

assim você pode ver como ele mistura as duas consultas em apenas uma.

Lembre-se, IEnumerables são preguiçosos, então você, a menos que seus elementos tenham que ser conhecidos (porque você os percorre, ou porque você faz isso .Count() para ver quantos itens são, etc), ele não executará nenhuma consulta / operação.