LINQ查询字符串[]group by多个匿名列
本文关键字:by group 查询 字符串 LINQ | 更新日期: 2023-09-27 17:53:17
我有一个带分隔符的文件,我正在读取一个字符串数组(文件没有头),然后尝试用LINQ查询解析。
我想按多个匿名列分组(使用数组索引),然后对其中一个字段求和。
例如,假设我有一个文件的格式为:
1000200034, 2015年,美国广播公司、1
1000200034, 2015, DEF 2
我想按第一列和第二列分组,忽略第三列,并对第四列求和。
返回:
1000200034, 2015,
当我按单个列分组时,我可以得到返回和的结果:
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(),
});