LINQ:我可以从集合中的列表中的对象获取属性吗?

时间:2011-09-13 15:00:55

标签: linq drilldown

    foreach (ReportType t in reportsCollection)
    {
        List<Report> reps = (from r in t.reports where r.isChecked == true select r).ToList<Report>();
        foreach (Report r in reps)
            System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(r.path));
    }

这句话很好用。我只是想找一个可以做到这一点的LINQ语句。

基本上,我有一个名为isChecked的属性的报表对象。 reportsCollection包含几个包含该类型报告列表的reportTypes。所以这个集合看起来像这样:

TYPE1

  • 报告
  • 报告2
  • 报告3

输入2

  • 报告4
  • 报告5
  • 报告6

等等。

我想要一个LINQ语句,它将获取这些类型中isChecked == true的所有报告。我怀疑循环是必要的,但我很想知道社区是否有解决方案。谢谢!

2 个答案:

答案 0 :(得分:6)

您想使用 SelectMany

var query = reportsCollection.SelectMany(t => t.reports)
                             .Where(r => r.isChecked == true)
                             .ToList();

在查询表达式语法表单中,您可以将其写为

var query = (from type in reportsCollection
            from report in type.reports 
            where report.isChecked == true
            select report).ToList();

答案 1 :(得分:2)

在查询语法中,它将如下所示

var query = from t in reportCollection
            from r in t.reports 
            where r.isChecked == true
            select r;