LINQ - la syntaxe de la Requête vs méthode des chaînes & lambda

Quelqu'un bâton à toutes les règles (ou vous êtes forcé de s'en tenir à toutes les règles par votre employeur?) lors du choix d'utiliser LINQ la syntaxe de la requête ou d'une expression Lambda à l'intérieur de l'un des LINQ méthodes d'extension? Cela s'applique à toutes les Entités, SQL, d'objets, de quoi que ce soit.

Sur notre lieu de travail, mon patron n'aime pas lambda, et il avait à utiliser la syntaxe de la requête pour rien, qui, dans certains cas, que je trouve sont de moins en moins lisible.

var names = collection.Select(item => item.Name);

var names = from item in collection
            select item.Name;

Peut-être lors de l'ajout d'une condition, le Lambda je trouve est un peu en désordre, où la

var names = collection.Where(item => item.Name == "Fred")
                      .Select(item => item.Name);

var names = from item in collection
            where item.Name == "Fred"
            select item.Name;

Vient de sortir d'intérêt: comment le compilateur de traiter celui-ci? Personne ne sait comment le au-dessus d'une requête LINQ de compiler en lambda? Sera le Name bien être appelée pour chaque élément? Pourrions-nous faire de ce lieu et potentiellement améliorer la performance? Serait-ce à dire lambda est légèrement plus contrôlable en termes de performance?

var names = collection.Select(item => item.Name)
                      .Where(name => name == "Fred");

Certainement lorsque nous commençons à utiliser de plus en plus et les expressions, le lambda devient bordélique et j'aimerais commencer à utiliser la syntaxe de la requête ici.

var names = collection.Where(item => item.Name == "Fred")
                      .OrderBy(item => item.Age)
                      .Select(item => item.Name);

var names = from item in collection
            where item.Name == "Fred"
            order by item.Age
            select item.Name;

Il y a aussi quelques choses que je trouve ne peut être fait avec la syntaxe de la requête. Certains d'entre eux vous pourriez penser que ce serait vraiment simple (en particulier les fonctions d'agrégation), mais non, vous devez ajouter l'un de l'extension LINQ méthodes pour la fin, qui l'omi, de l'apparence plus soignée avec une expression lambda.

var names = collection.Count(item => item.Name == "Fred");

var names = (from item in collection
            where item.Name == "Fred"
            select item).Count()

Même pour certains le simple lambda chaînes, ReSharper suggère-je les convertir en LINQ des requêtes sur.

Une autre personne peut ajouter à cela? Quelqu'un aurait-il de leur propre peu de règles ou ne leur entreprise suggèrent/forcer l'utilisation d'un?

  • Resharper donne souvent la possibilité de basculer vers l'autre, pas forcément mieux, e.g pour le foreach et vice versa
InformationsquelleAutor Connell | 2011-11-07