2009-11-02 4 views
1

Comment cette expression de requête LINQ peut-elle être ré-exprimée avec des appels de méthode d'extension?Plusieurs des clauses de LINQ

public static List<Tuple<int, int>> Concat() 
{ 
    return (from x in Enumerable.Range(1, 3) 
      from y in Enumerable.Range(4, 3) 
      select new Tuple<int, int>(x, y)).ToList(); 
} 
+0

requête _any_ LINQ peut être exprimé par les appels de méthode d'extension. Ceci est par définition - tous les mots-clés LINQ sont définis dans la spécification de langage en fournissant une extension aux appels de méthode correspondants. –

+0

A pu vérifier avec Reflector. –

Répondre

1
Enumerable.Range(1, 3).SelectMany(
    i => Enumerable.Range(4, 3), 
    (i, j) => new Tuple<int, int>(i, j) 
).ToList(); 
+0

L'utilisation du SelectMany surchargé avec une fonction resultSelector me semble plus lisible. Étant donné qu'il s'agit d'une traduction de ma compréhension de liste Haskell [(x, y) | x <- [1,2,3], y <- [4,5,6]]. – robertz

+1

Cet exemple de peut être écrit de manière plus concise en utilisant le style de point gratuit. (Voir http://en.wikipedia.org/wiki/Point-free_programming) Enumerable.Range (1, 3) .SelectMany ( i = > Enumerable.Range (4, 3), Tuple.Create ) .ToList(); – robertz

10
return Enumerable.Range(1, 3).SelectMany(x => Enumerable.Range(4, 3) 
      .Select(y => new Tuple<int, int>(x, y))).ToList(); 

Votre version semble :-) plus lisible

Questions connexes