Ben listelerin bir dizi var gitmek Verilen bir özelliğin (bar
) son listede yer aldığı bir değere sahip olduğu tüm foo
'seslerinin referanslarını yakalamak. Böyle yapıyorum: Sorgu birden çok liste
func<foo, bool> deadParrot = x => Brian.Contains(x.bar);
IEnumerable<foo> okLumberjacks = spamSpamAndSpam.Where(deadParrot);
okLumberjacks = okLumberjacks.Concat(
spamSpamSpamSpamSausageEggsAndSpam.Where(deadParrot));
// And so on, concatenating the results of Where() from every list of <foo>.
böyle, ben tek seferde hepsini bir yöntemi çağırmak, böylece tek bir
IEnumerable<foo>
filtreleme fonksiyonu karşıladığında her
foo
gerekir:
ni = ni.Concat(someList.Where(filter));
I:
foreach (foo incontinentRunner in okLumberjacks)
{
incontinentRunner.SillyWalk();
}
benim soru gibi bir şey başvurmak zorunda kalmadan tek bir koleksiyonda her foo
toplamak için bir yol ... var mı olduğunu Yani Linq ile böyle bir şey yapmak için daha zarif bir yol var mı?
okLumberjacks = spamSpamAndSpam.
And(spamSpamSpamSausageEggsAndSpam).
And(spamSpamSpamSausageEggsBaconAndSpam) /* etc */ .Where(deadParrot);
Veya daha iyi: onlar daha sonra başka bir işlem için olduğu gibi onları gerektiğinden foo
orijinal listelerini değiştirmek istemiyorum
okLumberjacks = spanishInquisition.Where(deadParrot);
// Where the type of spanishInquisition is List<List<foo>>.
Ben böyle bir şey arıyorum kodda.
Kodunuzdaki tüm OfType çağrıları hiçbir şey yapmaz; zaten belirtilen türden bir 'IEnumerable' var, bu yüzden sadece bir noop. – Servy
@Servy iyi bir nokta. Ama Sharepoint kullanıyorum ... Koleksiyon sınıflarının hiçbiri IEnumerable 'u uygulamamaktadır, ne de' Where' uzantısı yöntemini sergilememektedir, ancak bunların hepsi OfType'ı açığa çıkarmaktadır ve ben Linq için yeniyim. OfType'ı kaldırmak için soruyu düzenliyorum. Daha fazla Monty Python referansları için –
Renan
+1 bir SO soru mümkün olabileceğini düşündüm. – Kevin