2009-03-25 10 views
5

Mam problem z pobieraniem składu LINQ do kompilacji. Oto kod:Problem LINQ złożonego wyboru

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

Kod jest z samouczka stąd, pod nagłówkiem „SelectMany - Związek z 1”:

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

i błąd czasu kompilacji otrzymuję jest w następujący sposób:

ciało

zapytanie musi kończyć się klauzuli sELECT lub klauzuli grupowej

przecinek po prostu „numbersA” gdzie th Wystąpił błąd. Teraz nie mogę dowiedzieć się, co zrobiłem źle, ponieważ jest to po prostu kod, jak na stronie MS. Jakakolwiek pomoc będzie wspaniała, dzięki.

+0

Dziękuję za pytanie dokładnie, co miałem zamiar zapytać w tej chwili :) – mafu

Odpowiedz

12

Twój kod nie jest prawidłowym wyrażeniem LINQ. from Klauzula obsługuje tylko jedną kolekcję. Powinieneś powtórzyć całą klauzulę from. Prawdopodobnie chciałeś powiedzieć:

+0

masz tutaj pierwszy :) Głosuję za tobą. –

+1

Dzięki, próbowałem tego i działa świetnie. Szkoda, że ​​strona MS ma nieprawidłowy kod! – Chris

3

Jeśli dobrze rozumiem twój zamiar, potrzebujesz innego od.

Jak to:

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

To działa, dziękuję! Przykro mi, ale Mehrdad dostał pierwszą odpowiedź – Chris

10

Równowartość biegle składnia użyciu SelectMany, tak dla przypomnienia:

var pair = numbersA.SelectMany(a => numbersB, (a, b) => new {a, b}) 
        .Where(n => n.a < n.b); 
Powiązane problemy