Предполагая
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);
выглядит элегантно, но не работает. Он включает только списки классов, в которых хотя бы один класс имеет идентификатор 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 в списке списков.
Кен