2009-03-25 11 views
5

Tengo problemas para seleccionar un compuesto LINQ para compilar. Aquí está el código:compuesto LINQ problema de selecció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}; 

El código es de un tutorial de aquí, bajo el título 'SelectMany - Compuesto de 1':

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

Y el error de tiempo de compilación que se ve es como sigue:

cuerpo

una consulta debe terminar con una cláusula de selección o una cláusula grupo

La coma justo después 'numbersA' es donde º e error ocurre. Ahora no puedo entender lo que he hecho mal, ya que este es solo el código según el sitio web de MS. Cualquier ayuda sería genial, gracias.

+0

gracias por preguntar exactamente lo que iba a preguntar en este momento :) – mafu

Respuesta

12

Su código no es una expresión LINQ válida. from cláusula es compatible con una sola colección solamente. Debería repetir la cláusula completa from. Probablemente quisiste decir:

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

Tienes aquí primero :) Te voy a votar. –

+1

Gracias, lo intenté y funciona muy bien. ¡Lástima que el sitio MS tenga un código inválido! – Chris

3

Si entiendo tu intención correctamente, entonces necesitas otra.

De esta manera:

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

Eso funciona, ¡gracias! Lo siento, mehrdad fue primero con la respuesta – Chris

10

La sintaxis fluidez equivalente utilizando SelectMany, sólo para el registro:

var pair = numbersA.SelectMany(a => numbersB, (a, b) => new {a, b}) 
        .Where(n => n.a < n.b); 
Cuestiones relacionadas