7 Stimmen

Was ist der elegante Weg, folgende LINQ-Anweisung unter Verwendung von Erweiterungsmethoden neu zu schreiben?

Ich habe folgende LINQ-Anweisung und ich möchte sie mit Erweiterungsmethoden neu schreiben.

from x in e
from y in e
from z in e
select new { x, z }

Eine mögliche Lösung ist:

e.Join(e, x => 42, y => 42, (x, y) => new { x, y })
  Join(e, _ => 42, z => 42, (_, z) => new { _.x, z }); 

Allerdings ist das alles andere als elegant.

Haben Sie eine Idee, wie man die Schönheit des zweiten Ausdrucks verbessern könnte?

6voto

Jon Skeet Punkte 1325502

Die Verwendung von Join ist meiner Meinung nach der falsche Ansatz.

Das direkte Äquivalent davon ist (denke ich!):

e.SelectMany(x => e.SelectMany(y => e.Select(new { y, z }),
             (x, yz) => new { x, yz.z }))

Auch wenn ich denke, dass es äquivalent wäre zu:

e.SelectMany(x => e.SelectMany(y => e.Select(new { x, z })))

6voto

Darin Dimitrov Punkte 990883
e.SelectMany(x => e.SelectMany(y => e.Select(z => new { x, z })))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X