假设:
public class MyClass
{
public int ID {get; set; }
public string Name {get; set; }
}
and
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);
它看起来很优雅,但却不起作用。它只包括至少一个类具有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操作。
Ken