汇总两个集合中的数据

时间:2018-06-20 05:29:49

标签: c# linq

我对LINQ和汇总数据有疑问。我有两个csv文件,其中填充了我要用来练习的伪数据。

第一个csv文件(因子)包含以下字段:

  • 邮政编码
  • FactorType
  • FactorValue

样本数据

  • 31513,Type1,0.619046413
  • 31515,Type1,0.62013599
  • 31563,Type1,0.912988865
  • 31513,Type2,0.619046413
  • 31515,Type2,0.62013599
  • 31563,Type2,0.912988865
  • 31513,Type3,0.619046413
  • 31515,Type3,0.62013599
  • 31563,Type3,0.912988865

第二个csv文件(县)包含以下字段:

  1. 邮政编码

样本数据

  • 31513,正在应用
  • 31515,正在应用
  • 31563,正在应用
  • 31624,阿特金森
  • 31642,阿特金森
  • 31650,阿特金森
  • 31510,培根
  • 39870,贝克
  • 31034,鲍德温
  • 31059,鲍德温
  • 31061,鲍德温
  • 31062,鲍德温

我正在尝试使用LINQ来按县获取FactorType的平均值。我有一个查询,按县返回每个ZipCode的FactorType,代码和输出的屏幕截图如下。

var query =
            from county in countyRecords
            join factor in factorRecords on county.Zipcode equals factor.Zipcode
                into factorGroup
            orderby county.County
            select new CountyFactor
            {
                cf_county = county,
                cf_factors = factorGroup
            } into result
            group result by result.cf_county.County;

enter image description here

我的目标是获取每种因子类型的平均值,例如:

CountyName

  • 平均类型1
  • 平均Type2
  • 平均类型3

我的想法是获取第一个查询的结果,并在第二个查询中使用它们来获取那些结果,但是我不知道该怎么做。下面的代码是我所掌握的,但是不知道如何完成它。

var query2 =
            from data in query
            group data by data.Key into averageGroup
            select new
            {
                average = averageGroup.Average()
            }

谢谢您抽出宝贵的时间来研究这个问题!

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的目标,则希望按国家和类型获得平均值。您可以按2个字段进行分组。要获得平均值,您需要指定字段。我认为这应该对您有帮助:

List

答案 1 :(得分:0)

countyRecords.Join( FactorRecords, c => c.ZipCode, f => f.ZipCode, (c, f) => new { County = c, Factor = f }).GroupBy(Factor.Type).Select( x=> new { x.key, x.Sum(Average) }).ToList( );

我不知道您是否需要所有平均值的总和。将sum替换为max可获得最大平均值,min取最小平均值,取其平均值。