【问题标题】:How to return an object with the number of grouped rows plus the group by field value?如何返回具有分组行数加上按字段值分组的对象?
【发布时间】:2015-07-02 13:30:46
【问题描述】:

我在 C#、.NET 4 上使用 LINQ,由于有一个固定字段,我需要对表中的所有行进行分组,返回 groupby 字段值以及由于该子句而分组的每行数。

我写的代码是:

var result = (from p in db.MyPersons
              group p by new { p.IDPerson } into g
              select new
              {
                  IDPerson = g.Key.IDPerson,
                  Counter = g.Sum(p => p.IDPerson)
              });

但它会在新生成的对象的IDPersonCounter 字段上返回IDPerson

错在哪里? Sum 好像不相加?

【问题讨论】:

  • and the number of each rows grouped 所以你想要Counter = g.Count()

标签: c# .net linq group-by


【解决方案1】:

如果您想要组中的行数,请改用Count:(请注意,您也不需要匿名类型)

var result = (from p in db.MyPersons
              group p by p.IDPerson into g
              select new
              {
                  IDPerson = g.Key,
                  Counter = g.Count()
              });

Sum 会将组中的所有 IDPerson加起来 - 如果组中只有一项,则返回与 IDPerson 相同的值。

【讨论】:

  • 嗯。但是,如果现在我想要返回对象上的另一个表字段(用于学习)呢?比方说,字段surname。我是否需要在分组依据上指定它?我不能(就我所看到的)TheSurname = g.Surname 在选择内做。
  • 嗯,你现在有一组物品,那么哪个姓?如果具有相同IDPerson 的所有行都具有相同的姓氏,那么您也可以按surname 分组(在这种情况下,您确实需要匿名类型),或者您可以使用g.First().surname在输出中。
【解决方案2】:

如果您想按多列分组,可以这样做:

var result = (from p in db.MyPersons
              group p by new{ p.IDPerson, p.Surname} into g
              select new
              {
                  IDPerson = g.Key,
                  Surname=g.Surname,
                  Counter = g.Count()
              });

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多