【问题标题】:How to merge duplicate rows (Based on column) of data table & put it in separate data table?如何合并数据表的重复行(基于列)并将其放在单独的数据表中?
【发布时间】:2018-03-27 09:34:49
【问题描述】:

我有一个数据表,它返回如下结果:

我想做的是根据列对它们进行分组:cfg 和相应的计数。

想要的输出应该是这样的:

我尝试使用以下 LINQ 语法来完成这项工作:

    DataTable objDataTable = DLService.GetData();

    var distinctTable = from row in objDataTable.AsEnumerable()
                        group row by row.Field<string>("cfg") into newProps
                        orderby newProps.Key
                        select new
                        {
                            PropName = newProps.Key,
                            CountOfProps = newProps.Count()
                        };

我可以使用它按 cfg 进行分组,但无法根据 cfg 获得计数(总和)。 因为“公寓”有 4 个条目,所以我得到的是:4 个公寓(其返回的条目数)。它应该返回:74 公寓

谁能提供解决方案来完成这项工作?语法或其他方法有什么改进?

请注意,我不想使用 sql 查询进行分组。

【问题讨论】:

    标签: c# asp.net linq datatable


    【解决方案1】:

    在您的情况下,Group by 返回IEnumerable&lt;IGrouping&lt;object, DataRow&gt;&gt;。你需要做的是总结分组中的所有值:

     Dictionary<string, int> counts = dt.AsEnumerable()
                .GroupBy(x => x["cfg"])
                .OrderBy(x => x.Key)
                .ToDictionary(
                    x => (string) x.Key,
                    x => x.Select(row => (int) row["count"]).Sum()
                );
    

    【讨论】:

      【解决方案2】:

      尝试关注。 :

      var distinctTable = objDataTable.AsEnumerable()
         .GroupBy(x => row.Field<string>("cfg"))
         .OrderBy(x => x.Key)
         .Select( x => new { PropName = x.Key, CountofProps = x.Count}).ToList();
      

      【讨论】:

      • 显示错误“查询必须以 select 子句或 group 子句结尾”
      • 我刚刚修复了错误。我错误地从您的查询中复制了太多内容。
      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多