C# 使用LINQ在列表列表上聚合

C# 使用LINQ在列表列表上聚合,c#,linq,C#,Linq,以下是我的代码的简化版本: public enum Error { Error1, Error2, Error3, } public class DataUnit { public int Data; // Any Data public List<Error> Errors { get; private set; } } List<DataUnit> DataList; 公共枚举错误 { 错误1, 错误2, 错误3, } 公共类数据单元 { p

以下是我的代码的简化版本:

public enum Error
{
  Error1,
  Error2,
  Error3,
}

public class DataUnit
{
  public int Data; // Any Data
  public List<Error> Errors { get; private set; }
}

List<DataUnit> DataList;
公共枚举错误
{
错误1,
错误2,
错误3,
}
公共类数据单元
{
public int Data;//任何数据
公共列表错误{get;private set;}
}
列表数据列表;
我想使用LINQ展平
数据列表
,并获得
Error1
Error2
Error3
的总计数


谢谢。

您可以使用Linq的selectMany()语句:

dataList
.SelectMany(x => x.Errors)
.GroupBy(x => x)
.Select(g => new { Value = g.Key, Count = g.Count() })
DataList.SelectMany(list => list.Errors).Where(error => error == Error.Error1).Count()

您可以使用Linq的selectMany()语句:

DataList.SelectMany(list => list.Errors).Where(error => error == Error.Error1).Count()

非常感谢。我还计算了查询等价项,并将其添加到此处以确保完整性:
从数据列表中的x开始
从x.Errors中的y开始
将y分组到g中
选择新的{Value=g.Key,Count=g.Count()谢谢。我还计算了查询等价项,并将其添加到此处以确保完整性:
从数据列表中的x开始
从x.Errors中的y开始
将y分组到g中
选择新的{Value=g.Key,Count=g.Count()