/ / Ostatnie zachowanie przetwarzania Linq - .net, database, linq, orm, late-binding

Ostatnie zachowanie przetwarzania Linq - .net, database, linq, orm, late-binding

W tej sytuacji:

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

Będzie gdzie klauzula dotrzeć do bazy danych?

Odpowiedzi:

2 dla odpowiedzi № 1

Wydaje mi się, że masz na myśli:

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

I tak, dotrze do bazy danych.

Spróbuj użyć LINQPad, aby zobaczyć wygenerowany kod SQL. Oto przykład:

mam Actor tabela z polami:

Id | Name | Age

Kod:

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;

zostanie przetłumaczony na:

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

dzięki czemu możesz zobaczyć, jak miesza dwa zapytania w jednym.

Pamiętaj, że IEnumerables są leniwi, więc jeśli ich elementy nie muszą być poznane (ponieważ je sprawdzasz lub robisz .Count() aby zobaczyć, ile pozycji jest itp.), nie wykona żadnych zapytań / operacji.