我有一系列的列表:在一個查詢多個列表去
List<foo> spamSpamAndSpam;
List<foo> spamSpamSpamSausageEggsAndSpam;
List<foo> spamSpamSpamSausageEggsBaconAndSpam;
List<foo> spamSpamSpamSpamSpamWithoutSpam;
List<foo> spamSpamSpamSpamSpamSpamSpamSpamSpamLovelySpamWonderfulSpam;
我也有一系列的值,我在foo
屬性尋找:
List<string> Brian= new List<string>();
Brian.Add("Always");
Brian.Add("Look");
Brian.Add("On");
Brian.Add("The");
Brian.Add("Bright");
Brian.Add("Side");
Brian.Add("Of");
Brian.Add("Life");
我m會引用所有foo
的參數,其中給定的屬性(比如bar
)的值包含在後面的列表中。我做這樣的:
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>.
我需要每foo
已經匹配濾波功能單一IEnumerable<foo>
這樣我可以調用所有這些方法中一氣呵成,就像這樣:
foreach (foo incontinentRunner in okLumberjacks)
{
incontinentRunner.SillyWalk();
}
所以我的問題是...是有辦法聚集在一個單一的集合中的每個foo
,而無需求助於類似:
ni = ni.Concat(someList.Where(filter));
我意思是說,有沒有更好的方法來用Linq做這樣的事情?我在尋找類似:
okLumberjacks = spamSpamAndSpam.
And(spamSpamSpamSausageEggsAndSpam).
And(spamSpamSpamSausageEggsBaconAndSpam) /* etc */ .Where(deadParrot);
甚至更好:
okLumberjacks = spanishInquisition.Where(deadParrot);
// Where the type of spanishInquisition is List<List<foo>>.
我不想因爲我需要他們,因爲他們是另一個操作以後修改的foo
原有名單在代碼中。
代碼中的所有'OfType'調用都不會執行任何操作;你已經有了一個指定類型的IEnumerable,所以它只是一個noop。 – Servy
@Servy好點。但我使用的是Sharepoint ...它的集合類沒有一個實現IEnumerable,也沒有展示Where的擴展方法,但它們都暴露了OfType,而我是Linq的新手。我正在編輯該問題以刪除「OfType」。 –
Renan
+1對於更多的Monty Python引用,我認爲可能在SO問題中。 – Kevin