【问题标题】:Remove group by from LINQ QUERY从 LINQ QUERY 中删除 group by
【发布时间】:2018-07-20 12:41:19
【问题描述】:

我想从下面的代码中删除 GROUP BY 子句。我怎么能这样做。

var newDt = dt.AsEnumerable()
              .GroupBy(r => r.Field<string>("BATCH NUM"))
              .Select(g =>
              {
                  var row = dt.NewRow();

                  row["BATCH NUM"] = g.Key;
                  row["QTY"] = g.Sum(r => Convert.ToInt32(r.Field<string>("QTY")) + Convert.ToInt32(r.Field<string>("BONUS")));
                  row["PROD ID"] = String.Join(",", g.Select(x => x.Field<string>("PROD ID")).Distinct());
                  // row["PROD ID"] = g.Select(r => r.Field<string>("PROD ID"));
                  return row;
              }).CopyToDataTable();

它会产生问题,当我们有两个不同的“PROD ID”但具有相同的“BATCH NUM”时,它将“PROD ID”组合到一个字段中,它将两个 PROD ID 与相同的批次处理。 Here is a Image you can see

我想要的结果如下。

【问题讨论】:

  • 去掉GroupBy,你期待什么结果?
  • 当我删除 group by 子句时,我无法解决参考错误。
  • 把标记放在.GroupBy旁边,按删除键。完成 - 从代码中删除。
  • 基本上我不想对行进行分组,我只想复制你可以看到的那 3 列的值。
  • @mrjahanzaibniazi:然后编辑你的问题并解释它

标签: c# .net linq datatable


【解决方案1】:

如果您尝试删除 Group By,它会给您一个错误,因为您在选择中执行 Sum。你“GROUP”的对象在你删除时不再是一个TKey、TElement的Set。

如果你想对每个“PROD ID”做一个“QTY”的总和并收集“BATCH NUM”,这是最好的方法。

还有另一种使用 ToLookup 的方法,但是: lookup vs. groupby

在 cmets 中询问的详细信息:

通过查找,您可以做同样的事情...

var newDt = dt.AsEnumerable()
.ToLookup(r => r.Field<string>("PROD ID"))
.Select(g =>
{
     var row = dt.NewRow();
     row["PROD ID"] = g.Key;
     row["QTY"] = g.Sum(r => Convert.ToInt32(r.Field<string>("QTY")) + Convert.ToInt32(r.Field<string>("BONUS")));
     row["BATCH NUM"] = String.Join(",", g.Select(x => x.Field<string>("BATCH NUM")));
     return row;
}).CopyToDataTable();

是完全一样的,不同的是我在下面链接的帖子。

【讨论】:

  • 是的,你是对的,错误在于 Sum。那么如何在其中应用查找。 ?
  • 不,它不工作它也在分组。假设当我们有两个不同的 BATCH NUM 但产品 ID 相同时,它会将它们的数量相加并在单个字段中添加“BATCH NUM”。
  • 我已经编辑了我的问题并添加了更多图片细节,请看一下
  • 啊。因为您还需要对批号进行分组。喜欢 -> GroupBy(r => { r.Field("BATCH NUM"), r.Field("BATCH NUM")})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2015-02-17
相关资源
最近更新 更多