C#Groupby然后在分割CSV后求和(无标题)
阅读了各种帖子后,我想我已经接近得到我想要的结果了,但是“总和”部分给出了错误的答案。我怀疑这是因为我调用“sum”的方式,因为我的csv文件没有列标题 csv文件包含以下内容: 222,1 223,2 222,1 224,2 222,-1 我想做的是:C#Groupby然后在分割CSV后求和(无标题),c#,.net,linq,group-by,C#,.net,Linq,Group By,阅读了各种帖子后,我想我已经接近得到我想要的结果了,但是“总和”部分给出了错误的答案。我怀疑这是因为我调用“sum”的方式,因为我的csv文件没有列标题 csv文件包含以下内容: 222,1 223,2 222,1 224,2 222,-1 我想做的是: 读取CSV文件并拆分数据 按第一列分组 按组对第二列求和 以下是我迄今为止所做的工作: var newquery = from line in File.ReadAllLines(path_source) //read all lines
- 读取CSV文件并拆分数据
- 按第一列分组
- 按组对第二列求和
var newquery = from line in File.ReadAllLines(path_source) //read all lines in csv file
let values = line.Split(',') //split the values by separator
let price_value = values[0]
group line by price_value into g
orderby g.Key
//select g;
select new
{
price_column = g.Key,
qty_column = g.Sum(x => x[1])
};
var writesum = newquery.Select(record => record.price_column + "," + record.qty_column);
File.WriteAllLines(path_target, writesum);
路径_目标文件显示:
222,45
22380
22465
这告诉我,split
,groupby
,orderby
语法是正确的,但是和
是完全错误的
我怀疑sum
结果错误的原因之一是这里的语法qty\u column=g.sum(x=>x[1])
由于我的数据不包含标题,我无法调用示例中的x.something
另一方面,我可能在这一点上完全错了
非常感谢您的帮助。首先,在拆分后对值进行分组,而不是原始行:
group values by price_value into g
而不是
group line by price_value into g
qty_column = g.Sum(x => x[1])
接下来,在求和之前,解析要求和为整数的字符串
:
qty_column = g.Sum(x => int.Parse(x[1]))
而不是
group line by price_value into g
qty_column = g.Sum(x => x[1])
因为x[1]
是一个字符串
现在的结果是:
var newquery = from line in File.ReadAllLines(path_source) //read all lines in csv file.
let values = line.Split(',') //split the values by separator
let price_value = values[0]
group values by price_value into g
orderby g.Key
//select g;
select new
{
price_column = g.Key,
qty_column = g.Sum(x => int.Parse(x[1]))
};
这给了你:
222,1
223,2
224,2
无论如何,流畅的语法会更具可读性:
var v = new List<string> File.ReadAllLines(path_source) //read all lines in csv file.
.Select(x => x.Split(','))
.Select(x => new { Key = x.First(), Value = x.Last() })
.GroupBy(x => x.Key)
.Select(x => new
{
price_column = x.Key,
qty_column = x.Sum(y => int.Parse(y.Value))
});
var v=new List File.ReadAllLines(路径\源)//读取csv文件中的所有行。
.选择(x=>x.Split(','))
.Select(x=>new{Key=x.First(),Value=x.Last()})
.GroupBy(x=>x.Key)
.选择(x=>new
{
价格_列=x.键,
数量列=x.Sum(y=>int.Parse(y.Value))
});
谢谢你的帮助……你帮我节省了很多搜索时间!。。。。。我恐怕是新手犯了错误!今天学到了一些东西!再次感谢。