Group by, Count and Lambda Expression怎么理解?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)
SELECT STATE, COUNT(*)
FROM MYTABLE
GROUP BY STATE;

我正在使用C#和EntityFramework,但它似乎不能让它工作。以下是我做的:

public IEnumerable<object> PorcentajeState(Guid id)
{
    return _context.Sates.Where(a => a.Id == id)
                         .GroupBy(a => a.State)
                         .Select(n => new { n.StateId , n.Count() });
}

当然,它不会编译,你可以帮我吗?

提前致谢

提问于
用户回答回答于

尝试这个:

public IEnumerable<object> PorcentajeState(Guid id)
{
    return _context.Sates.Where(a => a.Id == id)
                         .GroupBy(a => a.StateId)
                         .Select(g => new { g.Key, Count = g.Count() });
}

查询语法中等价

public IEnumerable<object> PorcentajeState(Guid id)
{
    return from a in _context.Sates
           where a.Id == id
           group a by a.StateId into g
           select new { a.Key, Count = g.Count() };
}

无论哪种情况,如果你想要第一个属性被命名StateId而不是Key,只需将其更改为

new { StateId = g.Key, Count = g.Count() }
用户回答回答于

这个很好

public IEnumerable<object> PorcentajeState(Guid id)
    {
        return _context.Sates.Where(a => a.Id == id)
                             .GroupBy(a => a.StateId)
                             .Select(g => new { g.Key, Count = g.Count() });
    }

但试试这个。

public IEnumerable<object> PorcentajeState(Guid id)
        {
            return _context.Sates.Where(a => a.Id == id)
                                 .GroupBy(a => a.StateId)
                                 .Select(g => new { g.Key.StateId, Count = g.Count() });
        }

扫码关注云+社区

领取腾讯云代金券