1
    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,其中包含该类型的报告列表。所以集合看起来像这样:

类型1

  • 报告
  • 报告 2
  • 报告 3

类型 2

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

等等。

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

4

2 回答 2

7

您想使用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();
于 2011-09-13T15:02:54.290 回答
2

在查询语法中,它看起来像这样

var query = from t in reportCollection
            from r in t.reports 
            where r.isChecked == true
            select r;
于 2011-09-13T15:04:38.703 回答