2014-06-14 2 views
0

배열에서 최소 길이의 단어를 모두 얻으려면 LINQ 하위 쿼리를 사용하고 있습니다. 람다 식을 사용하여 그것을하고 싶습니다.람다 식을 사용하는 하위 쿼리

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

나에게 질문은 약간 모호한 것 같다, 그러나 이것은 당신이 찾고있는 무엇인가?

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

이 당신을 도움이 될 것입니다

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); 
6

이 작동 것이다 :

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

Upvoted. 'Min' 메쏘드가 매번 호출됨을 확인하는 흥미로운 링크 된 실을 보시고 여러분이 말하는 것처럼'O (n ** 2)'복잡성을 이끌어 내십시오. 이것을 다루는 또 다른 방법은'int min = int.MaxValue; var minNames = names.OrderBy (s => s.Length) .TakeWhile (s => min> = (min = s.Length))'그러나 이것은 솔루션보다 좋지 않습니다. –

관련 문제