复杂嵌套的observable集合上的LINQ

时间:2011-06-28 12:55:09

标签: linq nested observablecollection

我有一个嵌套的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));

但这不是给出确切的学生项目吗?有什么想法吗?

1 个答案:

答案 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
}