2009-11-02 51 views
1

如何使用擴展方法調用來重新表示LINQ查詢表達式?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

_Any_ LINQ查詢可以擴展方法的調用來表示。這是根據定義 - 所有的LINQ關鍵字都是通過擴展相應的方法調用來在語言規範中定義的。 – 2009-11-02 20:51:48

+0

可以用Reflector簽出。 – 2009-11-02 21:21:15

回答

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

使用帶有resultSelector函數的重載SelectMany接縫對我來說更具可讀性。鑑於這是我的哈斯克爾列表理解[(x,y)| x < - [1,2,3],y < - [4,5,6]]的翻譯。 – robertz 2009-11-02 21:55:35

+1

這可以更簡明地使用免費的點式被寫入例如(參見http://en.wikipedia.org/wiki/Point-free_programming) Enumerable.Range(1,3).SelectMany( I = > Enumerable.Range(4,3), Tuple.Create ).ToList(); – robertz 2010-03-25 21:36:10

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

你的版本看起來更具有可讀性:-)