如何在LINQ中选择多个聚合和非聚合

时间:2014-07-07 03:35:23

标签: c# sql linq

我有这个看起来很简单的TSQL语句

select qGroup, AVG(score), COUNT(score)
  from [Scores]
  where [year] = 2014 and charIndex('s', qGroup, 0) <> 1
  group by qGroup

但是,我无法弄清楚如何用LINQ(点符号)来表达这个

这是我失败的尝试

List<qGroupModel> query = context.Scores.Where(p => (p.schoolID == schoolID) && (p.Year == year) && !(p.qGroup.StartsWith("S"))).Select(p => new { p.Average(p2 => p2.Score), p.qGroup }).GroupBy(p => p.qGroup).ToList<qGroupModel>();

我从上面得到的错误如下

  

&#39; Models.Score&#39;不包含&#39;平均值&#39;的定义和不   扩展方法&#39;平均值&#39;接受第一个类型的参数   &#39; Models.Score&#39;可以找到(你是否错过了使用指令或   装配参考?)

我的LINQ敏锐度并不是那么好......但仍然......这似乎比它应该更难。

请帮忙

1 个答案:

答案 0 :(得分:0)

您可以尝试这种方式:

List<qGroupModel> query = 
                    context.Scores
                           .Where(p => (p.schoolID == schoolID) && (p.Year == year) && !(p.qGroup.StartsWith("S")))
                           .GroupBy(p => p.qGroup)
                           .Select(p => new qGroupModel { p.Average(p2 => p2.Score), p.qGroup })
                           .ToList();