我有一个嵌套的ObservableCollection<Student>
,从中如何使用LINQ或Lambda根据Id值获取特定学生?这是我的学生班:
public class Student
{
public Student()
{
}
public string Name;
public int ID;
public ObservableCollection<Student> StudLists;
}
因此,每个学生对象可以再次拥有学生集合,它可以像任意数量的嵌套级别一样。我们如何做LINQ或使用Lambda?我试过
var studs = StudCollections.Where(c => c.StudLists.Any(m => m.ID == 122));
但这不是给出确切的学生项目吗?有什么想法吗?
答案 0 :(得分:1)
如果您想要搜索StudCollections的所有后代,那么您可以编写一个类似的扩展方法:
static public class LinqExtensions
{
static public IEnumerable<T> Descendants<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> DescendBy)
{
foreach (T value in source)
{
yield return value;
foreach (T child in DescendBy(value).Descendants<T>(DescendBy))
{
yield return child;
}
}
}
}
并像这样使用它:
var students = StudCollections.Descendants(s => s.StudLists).Where(s => s.ID == 122);
如果您想要一位具有匹配ID的学生,请使用:
var student = StudCollections.Descendants(s => s.StudLists).FirstOrDefault(s => s.ID == 122);
if (student != null)
{
// access student info here
}