我能够像我想要的那样使用它,但我更喜欢方法语法到查询语法。
如何使用方法语法编写?
var data = (from stat in this._applicationDbContext.Stats
where stat.SupId == this.GetCurrentSupId() && stat.StatType == 1
orderby stat.WeekEnding descending
group stat by stat.WeekEnding into statGroup
select new WeeklyStat
{
WeekEnding = statGroup.First().WeekEnding,
Amount = statGroup.Sum(a => a.StatValue)
}).Take(6);
这是原始的SQL:
SELECT TOP (6)
SUM([stat_value]) AS lessons_graded,
CONVERT(DATE, [weekend]) weekending
FROM
[dbo].[Stats]
WHERE
stat_type = 1 AND sup_id = 1113
GROUP BY
CONVERT(DATE, [weekend])
ORDER BY
CONVERT(DATE, [weekend]) DESC
答案 0 :(得分:1)
对于没有连接的查询,此练习非常机械化。
基本规则是从stat
子句中提取from stat
变量,并将其粘贴到每个单独的子句中,如下所示:
var data = this._applicationDbContext.Stats
.Where(stat => stat.SupId == this.GetCurrentSupId() && stat.StatType == 1)
.OrderByDescending(stat => stat.WeekEnding)
.GroupBy(stat => stat.WeekEnding)
.Select(statGroup => new WeeklyStat {
WeekEnding = statGroup.First().WeekEnding,
Amount = statGroup.Sum(a => a.StatValue)
}).Take(6);
同样的事情发生在GroupBy
之后 - 现在你开始使用statGroup
作为你的lambda参数。
请注意,这只是一种可能的命名方案。由于lambdas中的参数名称是lambda的本地名称,因此您可以在Where
,OrderBy
和GroupBy
中使用不同的变量名称:
.Where(x => x.SupId == this.GetCurrentSupId() && x.StatType == 1)
.OrderByDescending(y => y.WeekEnding)
.GroupBy(z => z.WeekEnding)
显然,使用一致的命名方案可以大大提高可读性。