Jam*_*esP 1 c# sql linq entity-framework-4
我试图弄清楚如何使用Linq将以下SQL语句转换为Entity Framework:
SELECT SUM(Column1) AS Correct
, SUM(Column2) AS Incorrect
, UserName
FROM Stats
WHERE (StatType = 0)
GROUP BY UserName
ORDER BY UserName
Run Code Online (Sandbox Code Playgroud)
出于此问题的目的,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()
Run Code Online (Sandbox Code Playgroud)
以下应该做的伎俩:
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();
Run Code Online (Sandbox Code Playgroud)
请注意GroupBy返回IEnumerable<IGrouping<TKey, TValues>>.
这意味着x内部Select是一个IGrouping<TKey, TValues>.反过来,它基本上只IEnumerable<T>包含该组的所有行以及该组的键.
因此,要获取组中所有项的总和,您需要Sum在分组上使用并指定要汇总的哪些列作为Sum方法的参数.