Comportamento di elaborazione di LINQQuali
-
09-09-2020 - |
Domanda
In questa situazione:
var allCustomers = from c in customers select c;
var oldCustomers = from o in allCustomers where o.age > 70 select o;
.
Where Clausola Raggiungi il database?
Soluzione
Penso che tu intenda:
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 una tabella Actor
che ha 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)
.
Quindi puoi vedere come mescola le due query in una sola.
Ricorda, Ienumerables sono pigri, quindi tu a meno che i loro elementi non siano conosciuti (perché la iterano attraverso di loro o perché fai .Count()
per vedere quanti articoli sono, ecc.), Non eseguirà alcuna query / operazione.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow