2011-08-25 17 views
9

Co jest równoznaczne z poniższym fragmentem kodu w wyrażeniu lambda?Związek Wybierz używając wyrażenia lambda

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

var pairs = 
    from a in numbersA 
    from b in numbersB 
    where a < b 
    select new { a, b }; 
+1

Wystarczy rozgrzana ILSpy, aby dowiedzieć się, ale nie zmienić go metodami. (Wygląda na to, że będę musiał poczekać na @ Jon Skeet!) –

Odpowiedz

10

Oto wyrażenie LINQ pomocą metody składni (w przeciwieństwie do zapytania składni):

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

pairs = numbersA 
    .SelectMany(_ => numbersB, (a, b) => new { a, b }) 
    .Where(x => x.a < x.b); 

pierwotne zapytanie przekłada się na to, że:

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

pairs = numbersA 
    .SelectMany(_ => numbersB, (a, b) => new { a, b }) 
    .Where(x => x.a < x.b) 
    .Select(x => new { x.a, x.b }); 

Jednak ostatni numer Select nie jest wymagany i można go usunąć.

+0

+1, czy to jest to, do czego zostało to przetłumaczone, czy tak to po prostu można zrobić? –

+0

@George Duckett: Rozszerzyłem swoją odpowiedź, aby odpowiedzieć na Twój komentarz. –

+0

Dzięki, zainteresowani, jak dowiedzieliście się o oryginalnym tłumaczeniu? –

3

Proszę spojrzeć na ten link dla LINQ do tłumaczeń lambda

LinQ to Lambda

+0

+1, świetny link. –