/ / Linq ultimo comportamento di elaborazione - .net, database, linq, orm, late-binding

Linq secondo comportamento di elaborazione - .net, database, linq, orm, late-binding

In questa situazione:

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

Volere dove clausola raggiungere il database?

risposte:

2 per risposta № 1

Penso che tu voglia dire:

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

E sì, raggiungerà il database.

Prova a utilizzare LINQPad per vedere il codice SQL generato. Ecco un esempio:

Ho un Actor tabella che contiene i campi:

Id | Name | Age

Il codice:

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;

viene tradotto in:

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

così puoi vedere come mescola le due query in una sola.

Ricorda, IEnumerables sono pigri, quindi tu a meno che i loro elementi non debbano essere conosciuti (perché li stai iterando o perché lo fai .Count() per vedere quanti oggetti ci sono, ecc.), non eseguirà alcuna query / operazione.