LINQ est l'une des plus grandes améliorations de .NET depuis les génériques et il me fait gagner des tonnes de temps et des lignes de code. Cependant, la syntaxe courante me semble beaucoup plus naturelle que la syntaxe d'expression de requête.
var title = entries.Where(e => e.Approved)
.OrderBy(e => e.Rating).Select(e => e.Title)
.FirstOrDefault();
var query = (from e in entries
where e.Approved
orderby e.Rating
select e.Title).FirstOrDefault();
Y a-t-il une différence entre les deux ou y a-t-il un avantage particulier l'un par rapport à l'autre?
Réponses:
Ni mieux, ils répondent à des besoins différents. La syntaxe de requête prend tout son sens lorsque vous souhaitez exploiter plusieurs variables de plage . Cela se produit dans trois situations:
Voici un exemple (à partir des exemples LINQPad):
Comparez maintenant cela à la même chose dans la syntaxe de la méthode:
La syntaxe de la méthode, d'autre part, expose la gamme complète des opérateurs de requête et est plus concise avec les requêtes simples. Vous pouvez tirer le meilleur parti des deux mondes en mélangeant la syntaxe des requêtes et des méthodes. Cela se fait souvent dans les requêtes LINQ to SQL:
la source
Je préfère utiliser cette dernière (parfois appelée "syntaxe de compréhension des requêtes") quand je peux écrire l'expression entière de cette façon.
Dès que je dois ajouter (parenthèses) et
.MethodCalls()
, je change.Lorsque j'utilise le premier, je mets généralement une clause par ligne, comme ceci:
Je trouve cela un peu plus facile à lire.
la source
Chaque style a ses avantages et ses inconvénients. La syntaxe de requête est plus agréable en ce qui concerne les jointures et elle a le mot-clé let utile qui facilite la création de variables temporaires dans une requête.
La syntaxe courante, d'autre part, a beaucoup plus de méthodes et d'opérations qui ne sont pas exposées via la syntaxe de requête. De plus, comme ce ne sont que des méthodes d'extension, vous pouvez écrire les vôtres.
J'ai constaté que chaque fois que je commence à écrire une instruction LINQ à l'aide de la syntaxe de requête, je finis par la mettre entre parenthèses et à recourir à des méthodes d'extension LINQ fluides. La syntaxe de requête n'a tout simplement pas assez de fonctionnalités à utiliser seule.
la source
Dans VB.NET, je préfère de beaucoup la syntaxe des requêtes.
Je déteste répéter le vilain
Function
mot-clé:Cette requête soignée est beaucoup plus lisible et maintenable à mon avis:
La syntaxe de requête de VB.NET est également plus puissante et moins verbeuse qu'en C #: https://stackoverflow.com/a/6515130/284240
Par exemple, cette requête LINQ to DataSet (Objects)
VB.NET:
C #:
la source
Je ne reçois pas du tout la syntaxe de la requête. Il n'y a simplement aucune raison à cela dans mon esprit. let peut être obtenu avec les types .Select et anonymes. Je pense juste que les choses semblent beaucoup plus organisées avec la "ponctuation" là-dedans.
la source
L'interface fluide s'il n'y a qu'un endroit. Si j'ai besoin d'une sélection ou d'une commande, j'utilise généralement la syntaxe de requête.
la source
La syntaxe courante semble effectivement plus puissante, elle devrait également fonctionner mieux pour organiser le code en petites méthodes réutilisables.
la source
Je sais que cette question est balisée avec C #, mais la syntaxe Fluent est douloureusement verbeuse avec VB.NET.
la source
J'aime vraiment la syntaxe Fluent et j'essaie de l'utiliser où je peux, mais dans certains cas, par exemple lorsque j'utilise des jointures, je préfère généralement la syntaxe Query, dans ces cas, je la trouve plus facile à lire, et je pense que certaines personnes sont plus familiers avec la syntaxe Query (de type SQL) que les lambdas.
la source
Bien que je comprenne et que j'aime le format fluide, je suis resté fidèle à Query pour le moment pour des raisons de lisibilité. Les personnes qui viennent de découvrir LINQ trouveront Query beaucoup plus confortable à lire.
la source
Je préfère la syntaxe de requête car je viens de la programmation Web traditionnelle utilisant SQL. Il est beaucoup plus facile pour moi d'envelopper ma tête. Cependant, il pense que je vais commencer à utiliser le .Where (lambda) car il est certainement beaucoup plus court.
la source
J'utilise Linq depuis environ 6 mois maintenant. Lorsque j'ai commencé à l'utiliser, j'ai préféré la syntaxe de requête car elle est très similaire à T-SQL.
Mais, je reviens progressivement à l'ancien, car il est facile d'écrire des morceaux de code réutilisables en tant que méthodes d'extension et de les enchaîner. Bien que je trouve que mettre chaque clause sur sa propre ligne aide beaucoup à la lisibilité.
la source
Je viens de mettre en place les normes de notre entreprise et nous imposons l'utilisation des méthodes d'extension. Je pense que c'est une bonne idée de choisir l'un plutôt que l'autre et de ne pas les mélanger dans le code. Les méthodes d'extension ressemblent davantage à l'autre code.
La syntaxe de compréhension n'a pas tous les opérateurs et l'utilisation de parenthèses autour de la requête et ajoute des méthodes d'extension après tout, me supplie d'utiliser les méthodes d'extension depuis le début.
Mais pour la plupart, c'est juste une préférence personnelle à quelques exceptions près.
la source