2014-06-14 72 views
0

我正在使用LINQ子查詢來獲取數組中所有最小長度的單詞。 我想用Lambda Expression來做。使用Lambda表達式的子查詢

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

我這個問題似乎有點模糊,但是這是你在找什麼?

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

這會幫助你:

var minNames = names.Where(c => c.Length == names.Min(n => n.Length)) 
      .ToArray(); 
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); 
+0

Upvoted。看到有趣的鏈接線程,它確認每次調用'Min'方法,就像你說的那樣導致'O(n ** 2)'的複雜性。解決這個問題的另一種方法是int min = int.MaxValue; var minNames = names.OrderBy(s => s.Length).TakeWhile(s => min> =(min = s.Length))''但是這不會比你的解決方案好。 –