220 votes

Code équivalent à la ' laisser ' mot-clé dans enchaînés appels de méthode d’extension LINQ

Grâce aux fonctionnalités de compréhension de requête de compilateurs c#, vous pouvez écrire du code comme :

Dans l’expression de requête ci-dessus, la mot-clé permet une valeur à passer vers l’avant à l’endroit où et orderby opérations sans appels en double à .

Quel est l’ensemble équivalent des appels de méthode extension LINQ qui réalise que le mot clé « let » signifie ici ?

286voto

Marc Gravell Points 482669

Laissez n’a pas son propre fonctionnement ; Il Piggy-Back off de `` . Vous pouvez le voir si vous utilisez « reflector » à tirer dehors une dll existante.

ce sera quelque chose comme :

102voto

Keltex Points 17151

Il y a un bon article ici : http://gregbeech.com/blogs/tech/archive/2008/04/21/translating-c-3-0-query-syntax-for-linq-to-objects-part-4-let.aspx

Essentiellement `` crée un tuple anonyme. Elle est équivalente à :

7voto

Reb.Cabin Points 1390

Il y a aussi une .Laissez l'extension de la méthode dans le Système.Interactif, mais son but est d'introduire une expression lambda pour être évalué "en ligne" dans un fluide expression. Par exemple, considérer (dans LinqPad, disons) l'expression suivante qui crée de nouveaux nombres aléatoires à chaque fois qu'il est exécuté:

var seq = EnumerableEx.Generate(
    new Random(),
    _ => true,
    _ => _,
    x => x.Next());

De voir que de nouveaux échantillons aléatoires apparaissent de temps, considérer les points suivants

seq.Zip(seq, Tuple.Create).Take(3).Dump();

qui produit les paires dans lequel la gauche et la droite sont différentes. Pour produire des paires dans lequel la gauche et la droite sont toujours les mêmes, de faire quelque chose comme ce qui suit:

seq.Take(3).ToList().Let(xs => xs.Zip(xs, Tuple.Create)).Dump(); 

Si l'on pouvait invoquer les expressions lambda directement, on pourra écrire

(xs => xs.Zip(xs, Tuple.Create))(seq.Take(3).ToList()).Dump();

Mais on ne peut pas invoquer les expressions lambda, comme s'ils étaient des méthodes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X