1. 程式人生 > >Lambda語句的嵌套

Lambda語句的嵌套

有意 表達式 enume bsp nbsp 轉換 lec 類型 表達

// 獲取所有長度最短的名字(註意:可能有多個)

string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
IEnumerable<string> outQuery = names
.Where(
    n => n.Length == names.OrderBy(n2 => n2.Length).Select(n2 => n2.Length).First()
);

//註意,上面的==兩端分別是兩個長度int類型表達式,右端的orderby子句輸出仍是names原型,只不過順序變為升序了;再select是在此升序結果上取所有names成員的長度,這裏轉換了序列的類型由string變成了int,最後first取出最小的一個長度。

如果用Min方法,上面可簡寫為:

IEnumerable<string> outQuery = names
.Where(
n => n.Length == names.Min(n2=>n2.Length)

//註意:Min不同於Math中的Min函數,它也只能用lambda表達式做參數,且n2不能與重復用n,因為它們在同一級別相同。甚至在Min的表達式中還可用到n,如names.Min(n2=>n2.Length+n.Length),在這裏只看語法,沒有具有意義
);

Lambda語句的嵌套