c# - 使用linq c#计算CSV文件中列的平均值
问题描述
我对 c# 很陌生,但我真的很想开始使用 linq 从 excel 电子表格中提取简单信息。
问这个我觉得很尴尬,但我似乎找不到解决办法。基本上,我想要的只是在 CSV 文件中找到捐赠金额的平均值。
到目前为止,这是以下代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpTest
{
class Program
{
public string Donor { get; set; }
public DateTime Date { get; set; }
public decimal Amount { get; set; }
public string Charity { get; set; }
static void Main(string[] args)
{
{
var file = "C:\\Users\\user\\Desktop\\Donations.csv".AsFile();
File.ReadAllLines(file).Select(x => x.Split('\n')).Average(x => x.Count());
}
}
}
问题是我知道这是错误的,因为我只想要 Amount 中的值。对于这样的事情,我确信我应该使用 GroupBy(),但是我似乎无法提取公共类 Amount。如果有人能指出我正确的方向,我将不胜感激。非常感谢。
解决方案
创建一个对象模型来保存数据是一个好的开始
public class Donation {
public string Donor { get; set; }
public DateTime Date { get; set; }
public decimal Amount { get; set; }
public string Charity { get; set; }
}
接下来,您要解析 CSV 文件中的数据。
CSVHelper 之类的东西有助于将数据解析为可用对象。
var textReader = new StreamReader("C:\\Users\\user\\Desktop\\Donations.csv");
var csv = new CsvReader( textReader );
var records = csv.GetRecords<Donation>();
从那里使用 LINQ 计算平均值很简单,只需在已解析的集合上调用扩展方法即可。
var average = records.Average(_ => _.Amount);
推荐阅读
- active-directory - 针对 Windows 域控制器的凭据窃取 NTLM 中继攻击
- angular - 编辑或添加后无法刷新 ag 网格的行 - Angular
- asp.net - cookie 将被 asp.net 忽略
- python - 为什么 Sqlite3 Python 库给出的 Group by Query 结果与原始库不同?
- visual-studio - 是否有任何环境变量来控制 Visual Studio 编译器(cl.exe)消息语言
- eslint - 如何配置 lint-staged 以运行 eslint 和更漂亮的脚本
- android - 如何从 SelectionContainer 中获取选定的文本
- ios - 在 XCode 中找不到 App Attest Capability
- javascript - JQuery UI'可拖动不是函数'未捕获的TypeError
- curl - 无法使用 XTerm.js 和 WebSockets(基于 PHP)控制终端大小