Lambda语句的嵌套

// 获取所有长度最短的名字(注意:可能有多个)

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),在这里只看语法,没有具有意义
                );

 

posted on 2017-09-10 11:25  mol1995  阅读(371)  评论(0编辑  收藏  举报

导航