2010-03-31 15 views
5

foreach (peopleList.With (kişi => kişi.FirstName == "Messi")) { selectPeople.Add (kullanıcı); }LINQ ile Basitleştirilmesi - Temel seçim

Sadece LINQ kullanarak bunu basitleştirmenin herhangi bir yolu olup olmadığını merak ediyorum. Sonra

Ben sadece "Messi" 'ler içeren bir liste doldurmak için LINQ kullanmak çalışıyordu kalabalığa bak yerine

gibi ... Böyle bir şey çalışıyordu ...

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

Listede herkesi çek olmadan ekleyebilirim. Ama planlandığı gibi çalışmıyor. Belki bu ifadeyi basitleştiren bir nokta yoktur. Ama soru LINQ bilgimi güçlendirmek için değerli görünüyordu.

+0

Şimdi 'var var selectPeople = peopleList.Where (kişi => person.Name == "Messi") ToList() ; '' Bence bu soru gerçekten Seç ve SelectMany – baron

+1

'SelectMany' ile her bir öğe birden çok sonuç döndürebilir ve bunları tek bir sonuç kümesinde birleştirmek için kullanılır. Örneğin. IEnumerable allChildren = person.SelectMany (kişi => person.GetChildren()); Örneğinizle buna ihtiyacınız yok. –

+1

Ayrıca, 'Select', sorgu ifadesi yerine lambdas ile uzantı yöntemleri kullandığınızda çoğu zaman gereksizdir. Ancak, nesneyi başka bir şeye yansıtmak istiyorsanız, 'Seç'i kullanın. Örneğin, FirstName "Messi" ye eşit olduğunda bir LastNames listesi istiyorsanız, "peopleList.Where (p => p.FirstName ==" Messi ") gibi bir şey yaparsınız. (P => p.LastName) ; ', belirtilen kriterlere uyan tüm kişilerin son isimlerini temsil eden IEnumerable ' ile sonuçlanmalıdır. –

cevap

5

Civcivsiniz. Bunu bilmeden pratik olarak yapılır. X peopleList İçinde bulunduğu her türlü türü olan IEnumerable<X> yaratacak

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

.

sorgu ifadesi sözdizimi

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

olurdu Ve beton Liste formatında almak için, ben de zaten .ToList() uzantısı keşfettik inanıyoruz.

1

peopleList ne türdür? LINQ'ın çalışması için bir çeşit IEnumerable olması gerektiğine inanıyorum.

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

sizin seçme listede ve çivinin üzerine bir List<X> tip çağrı AsEnumerable() olduğundan ve çalışması gerekir.

+0

'List ' – baron

+0

Yukarıdaki satırı deneyin ve işe yarayıp yaramadığını görün, burada döküm yapmayız .... – Gabe

+1

'AsEnumerable()' gereksizdir. Ayrıca 'Select' bir' IEnumerable 'sonuçlanacaktır değil' ' –

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

veya zaten bir liste varsa:.

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