仮定
public class MyClass
{
public int ID {get; set; }
public string Name {get; set; }
}
と
List<MyClass> classList = //populate with MyClass instances of various IDs
できます
List<MyClass> result = classList.FindAll(class => class.ID == 123);
ID = 123のクラスだけのリストが表示されます。うまく機能し、エレガントに見えます。
今、私が持っていた場合
List<List<MyClass>> listOfClassLists = //populate with Lists of MyClass instances
リスト自体がフィルタリングされたフィルタリングされたリストを取得するにはどうすればよいですか。私は試した
List<List<MyClass>> result = listOfClassLists.FindAll
(list => list.FindAll(class => class.ID == 123).Count > 0);
エレガントに見えますが、機能しません。少なくとも1つのクラスのIDが123であるクラスのリストのみが含まれますが、一致するものだけでなく、そのリスト内のすべてのMyClassインスタンスが含まれます。
私はしなければならなくなった
List<List<MyClass>> result = Results(listOfClassLists, 123);
private List<List<MyClass>> Results(List<List<MyClass>> myListOfLists, int id)
{
List<List<MyClass>> results = new List<List<MyClass>>();
foreach (List<MyClass> myClassList in myListOfLists)
{
List<MyClass> subList = myClassList.FindAll(myClass => myClass.ID == id);
if (subList.Count > 0)
results.Add(subList);
}
return results;
}
これで仕事は終わりますが、それほどエレガントではありません。リストのリストでFindAllを実行するためのより良い方法を探しているだけです。
ケン