如何使用擴展方法調用來重新表示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();
}
如何使用擴展方法調用來重新表示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();
}
Enumerable.Range(1, 3).SelectMany(
i => Enumerable.Range(4, 3),
(i, j) => new Tuple<int, int>(i, j)
).ToList();
使用帶有resultSelector函數的重載SelectMany接縫對我來說更具可讀性。鑑於這是我的哈斯克爾列表理解[(x,y)| x < - [1,2,3],y < - [4,5,6]]的翻譯。 – robertz 2009-11-02 21:55:35
這可以更簡明地使用免費的點式被寫入例如(參見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
return Enumerable.Range(1, 3).SelectMany(x => Enumerable.Range(4, 3)
.Select(y => new Tuple<int, int>(x, y))).ToList();
你的版本看起來更具有可讀性:-)
_Any_ LINQ查詢可以擴展方法的調用來表示。這是根據定義 - 所有的LINQ關鍵字都是通過擴展相應的方法調用來在語言規範中定義的。 – 2009-11-02 20:51:48
可以用Reflector簽出。 – 2009-11-02 21:21:15