2009-03-25 7 views
5

J'ai des difficultés à compiler un composé LINQ. Voici le code:Problème de sélection de composé LINQ

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

Le code est d'un tutoriel d'ici, sous la rubrique « SelectMany - composé de 1 »:

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

Et l'erreur de compilation que je reçois est comme suit:

un corps de requête doit se terminer par une clause select ou une clause de groupe

La virgule juste après « numbersA » est où e L'erreur se produit. Maintenant, je ne peux pas comprendre ce que j'ai fait de mal, car ce n'est que du code selon le site MS. Toute aide serait super merci.

+0

Merci de demander exactement ce que je vais demander cette minute :) Vous avez – mafu

Répondre

12

Votre code n'est pas une expression LINQ valide. La clause from prend en charge une seule collection. Vous devriez répéter toute la clause from. Vous avez probablement voulu dire:

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

ici d'abord :) Je vous vote. –

+1

Merci, j'ai essayé ça et ça marche super bien. Dommage que le site MS a un code invalide! – Chris

3

Si je comprends bien votre intention, alors vous en avez besoin d'un autre.

Comme ceci:

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

Cela fonctionne, merci! Désolé, cependant, mehrdad est arrivé en premier avec la réponse – Chris

10

La syntaxe couramment équivalente à l'aide SelectMany, juste pour le dossier:

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