J'utilise Entity Framework dans mon application Web ASP.NET, C #. Si je dois sélectionner un enregistrement à partir de DataBase (dans Data Access Layer), quelle méthode dois-je utiliser? Requête Linq ou une expression Lambda?
Par exemple:-
//Linq
var result = from a in db.myTable.Take(1) where a.Id == varId select a;
return result.First();
//Lambda
return db.myTable.FirstOrDefault(a => a.Id == varId);
Y a-t-il un moyen privilégié dans ce scénario ou un avantage sur l'autre?
Query Expression est compilé dans Method Expression (expression Lambda). Par conséquent, il ne devrait y avoir aucune différence dans votre code même si vous accédez à First
et FirstOrDefault
qui se comporteraient différemment.
Voir: Syntaxe de requête et syntaxe de méthode dans LINQ (C #)
et Expressions de requête LINQ (Guide de programmation C #)
Lors de la compilation, les expressions de requête sont converties en appels de méthode à un opérateur de requête standard, conformément aux règles définies dans la spécification C #. Toute requête pouvant être exprimée à l'aide de la syntaxe de requête peut également l'être à l'aide de la syntaxe de méthode. Cependant, dans la plupart des cas, la syntaxe de la requête est plus lisible et concise.
La syntaxe de requête Linq est juste un sucre de syntaxe pour les méthodes d'expression. Toute requête Linq compilée dans des méthodes d'expression. Btw votre première requête:
var query = from a in db.myTable.Take(1)
where a.Id == varId
select a;
return query.First();
Est équivalent à
return db.myTable.Take(1).Where(a => a.Id == varId).First();
Vos deux essais utilisent Linq.
Le premier prend un enregistrement et vérifie si l'identifiant correspond.
Le second prend le premier enregistrement où l'identifiant correspond.
C'est une différence.
Je suppose que le résultat est le même. Lambda est juste un peu plus confortable. Si vous avez besoin d'un résultat avec une seule table, l'expression lambda est très rapide et lisible.
Chaque expression de requête peut être exprimée sous forme de code C # en utilisant des appels aux opérateurs de requête en tant que méthodes d'extension. Mais le contraire n'est pas vrai. seul un petit sous-ensemble des opérateurs de requête standard peut être utilisé comme mot-clé dans les expressions de requête. En d'autres termes, les expressions de requête ont certaines limitations que le mécanisme d'appel de méthode n'a pas: