【问题标题】:LINQ group by and writerecordsLINQ group by 和 writerecords
【发布时间】:2020-10-14 15:21:49
【问题描述】:

我有一个 csv 文件,其中包含卡通人物及其分类。我想按分类对它们进行分组,并根据分类对它们进行计数。我按照 Stack Overflow 上的答案解决了这个问题,但他们只是将结果写入控制台。我想用 csvhelper 将它写入一个 csv 文件,但我不知道如何。 例如: 输入:

id | classfication
1       Wolf 
2       Fish
3       Wolf

输出:

classfication | count
    Wolf          2
    Fish          1

代码(它工作正常,我无法将其写入 CSV 文件):

            foreach (var line in list.GroupBy(info => info.classfication)
                        .Select(group => new {
                            Metric = group.Key,
                            Count = group.Count()
                        })
                        .OrderBy(x => x.Metric))
            {
                var one = line.Metric;
                var two = line.Count;
                full = one + two;
            
            
            using (var writer = new StreamWriter("Projects\\Example\\Output.csv"))
            using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
            {
                csv.WriteRecords(full.ToList()); //I don't know what to write here, instead of 'full'
            }
            }

【问题讨论】:

  • 将查询存储在变量中,而不是在 foreach 子句中指定所有内容

标签: c# linq csvhelper


【解决方案1】:

CsvWriter 接受以 CSV 格式写入的项目列表。所以你不需要遍历列表(使用 foreach)。相反,首先创建 groupedList,然后将该列表写入文件:

// step 1, create the grouping
var groupedList = list.GroupBy(info => info.classification)
                  .Select(grp => new 
                   {
                      Metric = grp.Key,
                      Count = grp.Count()
                   }) 
                   .ToList();

// step 2, write to file
using (var writer = new StreamWriter("Projects\\Example\\Output.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(groupedList); 
}

【讨论】:

  • 非常感谢!这正是我问的。 (您在 .ToList(); 之前忘记了一个 ')' ) 会接受,但由于某种原因,我需要再等 4 分钟。
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2021-01-01
相关资源
最近更新 更多