2009-03-25 28 views
5

Tôi đang gặp khó khăn khi nhận được một hợp chất LINQ chọn để biên dịch. Đây là mã:LINQ hợp chất chọn vấn đề

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

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

Mã này là từ một hướng dẫn từ đây, dưới tiêu đề 'SelectMany - Compound từ 1':

http://msdn.microsoft.com/en-us/vcsharp/aa336758.aspx#SelectSimple1

Và các lỗi thời gian biên dịch tôi nhận được là như sau:

Nội dung truy vấn phải kết thúc bằng mệnh đề chọn hoặc mệnh đề nhóm

Dấu phẩy chỉ sau 'sốA' là vị trí thứ e lỗi xảy ra. Bây giờ tôi không thể tìm ra những gì tôi đã làm sai, vì đây chỉ là mã theo trang web MS. Bất kỳ trợ giúp sẽ là tuyệt vời, cảm ơn.

+0

Cảm ơn bạn đã hỏi chính xác những gì tôi sẽ hỏi phút này :) – mafu

Trả lời

12

Mã của bạn không phải là biểu thức LINQ hợp lệ. Mệnh đề from chỉ hỗ trợ một bộ sưu tập duy nhất. Bạn nên lặp lại toàn bộ mệnh đề from. Bạn có thể muốn nói:

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

Bạn có ở đây đầu tiên :) Tôi sẽ bầu bạn. –

+1

Cảm ơn, tôi đã thử điều đó và nó hoạt động tuyệt vời. Đáng tiếc là trang web MS có mã không hợp lệ! – Chris

3

Nếu tôi hiểu ý định của bạn một cách chính xác thì bạn cần người khác.

Như thế này:

var pairs = 
    from a in numbersA // Comma removed from end of line here 
    from b in numbersB // additional "from" keyword at start of line 
    where a < b 
    select new {a, b}; 
+0

Điều đó hoạt động, cảm ơn! Xin lỗi, mehrdad đã có câu trả lời đầu tiên – Chris

10

Cú pháp thông thạo tương đương sử dụng SelectMany, chỉ dành riêng cho các kỷ lục:

var pair = numbersA.SelectMany(a => numbersB, (a, b) => new {a, b}) 
        .Where(n => n.a < n.b); 
Các vấn đề liên quan