2010-03-31 5 views
5

foreach (var person in peopleList.Where (person => person.FirstName == "Messi")) { selectPeople.Add (person); }LINQ로 SImplifying - 기본 선택

LINQ를 사용하여 이것을 단순화 할 수있는 방법이 있는지 궁금합니다. 그런 다음

난 그냥 "메시"의와 목록을 채우기 위해 LINQ를 사용하려고했던 모든 사람들을 봐보다는

처럼 ... 뭔가를하려고했다 ...

var selectPeople = peopleList.Select(x=>x.FirstName=="Messi");

수표없이 모든 사람을 그 목록에 추가 할 수 있습니다. 그러나 그것은 계획대로 잘 작동하지 않습니다.

아마도 표현을 단순화 할 필요가 없을 것입니다. 그러나 문제는 LINQ 지식을 강화하는 것만으로도 가치있는 것처럼 보였습니다.

+0

을 나는 지금'있어 var에 selectPeople = peopleList.Where (사람 => person.Name == "메시") ToList() ; '그래서 Select와 SelectMany를 사용하는 방법에 관한 질문입니다. – baron

+1

'SelectMany'는 각 항목이 여러 결과를 반환 할 수 있고 단일 결과 집합으로 결합하고자 할 때 사용됩니다. 예 : 'IEnumerable allChildren = person.SelectMany (person => person.GetChildren());'예제와 함께 필요하지 않습니다. –

+1

또한 쿼리 식 대신 람다 (lambda)를 사용하는 확장 메서드를 사용할 때'선택 '이 중복되는 경우가 많습니다. 그러나 객체를 다른 것으로 투영하려면 '선택'을 사용하십시오. 예를 들어 FirstName이 "Messi"와 같을 때 LastNames의 목록 만 원할 경우,'peopleList.Where (p => p.FirstName == "Messi")와 같은 일을 할 것입니다 Select (p => p.LastName) ;', 주어진 기준과 일치하는 모든 사람들의 성을 나타내는'IEnumerable '이되어야합니다. –

답변

5

끝났습니다. 실제로 그것을 모른 채 완료되었습니다. X는 peopleList에있어 그 어떤 유형 인 IEnumerable<X>을 생성합니다

var selectPeople = peopleList.Where(x=>x.FirstName == "Messi"); 

.

쿼리 식 구문이

var selectPeople = from person in peopleList 
        where person.FirstName == "Messi" 
        select person; 

것 그리고 구체적인 목록 형식으로 그걸 얻기 위해, 난 당신이 또한 이미 .ToList() 확장을 발견했습니다 믿습니다.

1

peopleList는 어떤 유형입니까? 나는 LINQ가 작동하는 IEnumerable 유형이어야한다고 생각한다.

var selectPeople = peopleList.AsEnumerable().Select(x=>x.FirstName=="Messi"); 

은 당신의 선택의 목록 및 압정에 List<X> 유형 통화 AsEnumerable()이기 때문에 그것은 작동합니다.

+0

그것의'List ' – baron

+0

위의 라인을 시도해보고 그것이 작동하는지 확인하기 위해 여기에 asEnumerable을 캐스팅합니다 .... – Gabe

+1

'AsEnumerable()'은 필요 없습니다. 또한'Select'는'IEnumerable ''IEnumerable ' –

1
var selectPeople = new List<Person>(peopleList.Where(x=>x.FirstName=="Messi")); 

하거나 이미 목록이있는 경우 :.

selectPeople.AddRange(peopleList.Where(x=>x.FirstName=="Messi"));