Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Groupby然后在分割CSV后求和(无标题)_C#_.net_Linq_Group By - Fatal编程技术网

C#Groupby然后在分割CSV后求和(无标题)

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

阅读了各种帖子后,我想我已经接近得到我想要的结果了,但是“总和”部分给出了错误的答案。我怀疑这是因为我调用“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 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))
});

谢谢你的帮助……你帮我节省了很多搜索时间!。。。。。我恐怕是新手犯了错误!今天学到了一些东西!再次感谢。