2011-08-25 29 views
9

Tương đương với đoạn mã sau trong biểu thức lambda là gì?Hợp chất Chọn sử dụng biểu thức 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

Chỉ cần bắn lên ILSpy để tìm hiểu, nhưng nó đã không thay đổi nó thành phương pháp. (Có vẻ như tôi sẽ phải đợi @Jon Skeet!) –

Trả lời

10

Đây là một biểu thức LINQ sử dụng phương pháp cú pháp (như trái ngược với cú pháp truy vấn):

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); 

Các truy vấn ban đầu được dịch sang này:

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 }); 

Tuy nhiên Select cuối cùng không bắt buộc và có thể bị xóa.

+0

+1, đó thực sự là những gì nó được dịch, hay đó chỉ là cách bạn sẽ làm điều đó? –

+0

@George Duckett: Tôi đã mở rộng câu trả lời của mình để trả lời nhận xét của bạn. –

+0

Cảm ơn, không quan tâm, làm cách nào bạn tìm ra bản dịch gốc? –

3

hãy có một cái nhìn tại liên kết này cho LINQ to bản dịch Lambda

LinQ to Lambda

+0

+1, liên kết tuyệt vời. –

Các vấn đề liên quan