【问题标题】:LINQ query string[] group by multiple anonymous columnsLINQ 查询字符串 [] 按多个匿名列分组
【发布时间】:2015-06-04 17:25:39
【问题描述】:

我有一个分隔文件,我正在读入一个字符串数组(文件没有标题),然后尝试使用 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 背景很扎实。只是很难转换我所知道的。任何帮助表示赞赏!

【问题讨论】:

    标签: c# arrays string linq group-by


    【解决方案1】:

    问题是由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(),
        });
    

    【讨论】:

    • 谢谢。我不知道需要为匿名类型提供字段名称。
    猜你喜欢
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2014-01-05
    相关资源
    最近更新 更多