gpt4 book ai didi

c# - LINQ 查询字符串[] 按多个匿名列分组

转载 作者:行者123 更新时间:2023-12-02 20:04:04 26 4
gpt4 key购买 nike

我有一个分隔文件,正在读入字符串数组(文件没有 header ),然后尝试使用 LINQ 查询进行解析。

我想按多个匿名列进行分组(使用数组索引),然后对其中一个字段求​​和。

例如,假设我有一个格式如下的文件:

1000200034,2015,ABC,1

1000200034,2015,DEF,2

我想按第一列和第二列进行分组,忽略第三列,并对第四列求和。

这样我就回来了:

1000200034,2015,3

当我按单列分组时,我可以获得返回总和的结果:

IEnumerable<string[]> query = from row in data
where row[0] == "1000200034"
group row by row[0] into g
select new string[]
{
g.Key,
g.Sum(a=>int.Parse(a.ElementAt(3))).ToString(),
};

但是如果我尝试添加另一列,我将不再得到总和,我会返回两行:

 IEnumerable<string[]> query = from row in data
where row[0] == "1000200034"
group row by new[]{row[0], row[1]} into g
select new string[]
{
g.Key[0],
g.Key[1],
g.Sum(a=>int.Parse(a.ElementAt(3))).ToString(),
};

我对 LINQ 和 C# 还很陌生,但我的 SQL 背景很扎实。只是很难转换我所知道的。如有任何帮助,我们将不胜感激!

最佳答案

问题是由于按 new [] 分组造成的,它应该只是 new,而且您还必须为组中使用的匿名类型指定字段名称,例如:

IEnumerable<string[]> query = from row in data
where row[0] == "1000200034"
group row by new { FirstKey = row[0], SecondKey = row[1] } into g
select new string[]
{
g.Key.FirstKey,
g.Key.SecondKey,
g.Sum(a=>int.Parse(a.ElementAt(3))).ToString(),
};

使用方法语法,它应该如下所示:

IEnumerable<string[]> query2 = data.Where(row => row[0] == "1000200034")
.GroupBy(row => new { FirstKey = row[0], SecondKey = row[1] })
.Select(grp => new string[]
{
grp.Key.FirstKey,
grp.Key.SecondKey,
grp.Sum(a => int.Parse(a.ElementAt(3))).ToString(),
});

关于c# - LINQ 查询字符串[] 按多个匿名列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com