C# 使用SUM()将SQL语句转换为Linq/Entity框架

C# 使用SUM()将SQL语句转换为Linq/Entity框架,c#,sql,linq,entity-framework-4,C#,Sql,Linq,Entity Framework 4,我试图弄清楚如何使用Linq将以下SQL语句转换为实体框架: SELECT SUM(Column1) AS Correct , SUM(Column2) AS Incorrect , UserName FROM Stats WHERE (StatType = 0) GROUP BY UserName ORDER BY UserName 出于这个问题的目的,DB中的所有列类型都是INT类型,并且每个用户都有多行数据。我基本上希望在我的输出中有3列,每个用户的正确和错误

我试图弄清楚如何使用Linq将以下SQL语句转换为实体框架:

SELECT SUM(Column1) AS Correct
     , SUM(Column2) AS Incorrect
     , UserName
FROM   Stats 
WHERE (StatType = 0)
GROUP BY UserName
ORDER BY UserName 
出于这个问题的目的,DB中的所有列类型都是INT类型,并且每个用户都有多行数据。我基本上希望在我的输出中有3列,每个用户的正确和错误选择的总数

这看起来像是一个简单的SQL语句,但无论我在LinqPad之类的东西中尝试什么,我总是会出错。我一定错过了一些相对简单的东西。一旦我开始添加“.Sum”子句,就会出现编译错误等

Stats.Where(s => s.StatType == 0)
     .GroupBy(s => s.UserName)
     .Select(x => new {  Correct = x.Column1
                       , Incorrect = x.Column2
                       , User=x.UserName})
     .ToList()

下面应该可以做到这一点:

Stats.Where(s => s.StatType == 0)
     .GroupBy(s => s.UserName)
     .Select(x => new { Correct = x.Sum(y => y.Column1),
                        Incorrect = x.Sum(y => y.Column2),
                        User = x.Key})
     .ToList();
请注意,
GroupBy
返回一个
IEnumerable

这意味着
Select
中的
x
是一个
i分组
。反过来,它基本上只是一个
IEnumerable
,包含该组的所有行以及该组的键。

因此,要获得一个组中所有项目的总和,您需要在分组中使用
sum
,并指定要求和的列作为
sum
方法的参数。

以下应该可以做到这一点:

Stats.Where(s => s.StatType == 0)
     .GroupBy(s => s.UserName)
     .Select(x => new { Correct = x.Sum(y => y.Column1),
                        Incorrect = x.Sum(y => y.Column2),
                        User = x.Key})
     .ToList();
请注意,
GroupBy
返回一个
IEnumerable

这意味着
Select
中的
x
是一个
i分组
。反过来,它基本上只是一个
IEnumerable
,包含该组的所有行以及该组的键。
因此,要获取组中所有项的总和,需要在分组中使用
sum
,并指定要求和的列作为
sum
方法的参数