Ken*_*ter 3 .net c# list findall
假设
public class MyClass
{
public int ID {get; set; }
public string Name {get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
List<MyClass> classList = //populate with MyClass instances of various IDs
Run Code Online (Sandbox Code Playgroud)
我可以
List<MyClass> result = classList.FindAll(class => class.ID == 123);
Run Code Online (Sandbox Code Playgroud)
这将给我一个ID = 123的类的列表.效果很好,看起来很优雅.
现在,如果我有
List<List<MyClass>> listOfClassLists = //populate with Lists of MyClass instances
Run Code Online (Sandbox Code Playgroud)
如何获得筛选列表本身被过滤的筛选列表.我试过了
List<List<MyClass>> result = listOfClassLists.FindAll
(list => list.FindAll(class => class.ID == 123).Count > 0);
Run Code Online (Sandbox Code Playgroud)
它看起来很优雅,但不起作用.它只包括类的列表,其中至少有一个类的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;
}
Run Code Online (Sandbox Code Playgroud)
完成工作,但不是那么优雅.只是寻找更好的方法在列表列表上执行FindAll.
肯
小智 5
listOfClasses.SelectMany(x => x).FindAll(/*yadda*/)
很抱歉,FindAll是List <T>的方法.
这个
var result = from x in listOfClasses from y in x where SomeCondition(y) select y;
Run Code Online (Sandbox Code Playgroud)
要么
var result = listOfClasses.SelectMany(x=>x).Where(x=>SomeCondition(x));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6973 次 |
| 最近记录: |