使用Lambda Expression的SubQuery

时间:2014-06-14 11:15:40

标签: c# linq lambda

我正在使用LINQ子查询来获取数组中所有最小长度的单词。 我想用Lambda Expression来做。

var names = new[] { "Tom", "Dick", "Harry", "Mary", "Jay" }.AsQueryable();
(
from n in names
where n.Length == names.Min (n2 => n2.Length)
select n
)

输出:  汤姆,杰伊

谢谢, Prakhar

3 个答案:

答案 0 :(得分:6)

这样可行:

var minNames = names.Where(s => s.Length == names.Min(n=>n.Length));

但它会评估列表中每个名称的最小长度(O(n*n)复杂度),因此这会更好:

var min = names.Min(s => s.Length); //calc. this only once
var minNames = names.Where(s => s.Length == min);

答案 1 :(得分:3)

对我来说这个问题看起来有点模糊,但这是你在寻找的吗?

 names.Where (x => x.Length == names.Min (n2 => n2.Length));

答案 2 :(得分:0)

这可以帮到你:

    var minNames = names.Where(c => c.Length == names.Min(n => n.Length))
            .ToArray();