私は一連のリストを持っています:
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");
特定のプロパティ(たとえば、 )が後者のリストに含まれる値を持つすべてのfoo
'sesへの参照をキャッチしています。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
に、フィルタリング関数に一致するすべてのものを 1 つにする必要があります。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
。後でコード内で別の操作を行うために必要だからです。