Linq dernier traitement de comportement
-
09-09-2020 - |
Question
Dans cette situation:
var allCustomers = from c in customers select c;
var oldCustomers = from o in allCustomers where o.age > 70 select o;
Va où clause de portée de la base de données?
La solution
Je pense que tu veux dire:
var oldCustomers = from o in allCustomers where o.age > 70 select o;
Et Oui, il atteindra la base de données.
Essayez d'utiliser LINQPad pour voir le code SQL généré.Voici un exemple:
J'ai un Actor
table qui a les champs:
Id | Name | Age
Le code:
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;
se traduit en:
-- 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)
donc vous pouvez voir comment il mêle les deux requêtes en une seule.
Rappelez-vous, IEnumerables sont paresseux, vous, à moins que leurs éléments doivent être connus (parce que vous itérer à travers eux, ou parce que vous n' .Count()
pour voir combien d'éléments sont, etc), il ne sera pas exécuter n'importe quelle requête/opération.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow