【发布时间】:2016-06-15 07:30:22
【问题描述】:
正如标题所说,我的表中有一个日期时间列。
在三种不同的情况下,我需要以三种方式按我的记录进行分组:
- 按天分组
- 按周分组
- 按月分组
如果可能的话,我如何在实体框架中使用 lambda 表达式执行这 3 种不同的分组语句?
更新:链接的问题是重复的,不是真正的重复。我要的是 lambda 解决方案,但链接中没有它
【问题讨论】:
标签: c# sql sql-server entity-framework datetime
正如标题所说,我的表中有一个日期时间列。
在三种不同的情况下,我需要以三种方式按我的记录进行分组:
如果可能的话,我如何在实体框架中使用 lambda 表达式执行这 3 种不同的分组语句?
更新:链接的问题是重复的,不是真正的重复。我要的是 lambda 解决方案,但链接中没有它
【问题讨论】:
标签: c# sql sql-server entity-framework datetime
你可以使用这个方法:
var ByDayGrouped = new TestEntities().Objects.GroupBy(O => new { O.date.Year, O.date.Month, O.date.Day }).ToList();
var ByMonthGrouped = new TestEntities().Objects.GroupBy(O => new { O.date.Year, O.date.Month }).ToList();
var ByWeekGrouped = new TestEntities().Objects.GroupBy(O => (O.date.DayOfYear % 7) + M ).ToList();
【讨论】:
M 查询中的M 变量是什么?
使用这个
List<MyEntitiy> list = (from e in Context.MyEntities group e by e.Date.Day into g select g).ToList();
对于月份,将 e.Date.Day 替换为 e.Date.Month
对于Week,您必须首先Calculate WeekOfYear
public int GetWeekOfYear(this DateTime d)
{
GregorianCalendar c = new GregorianCalendar();
return c.GetWeekOfYear(d,CalenderWeekRule.FirstDay,DayOfWeek.Sunday);
}
并使用
List<MyEntitiy> list = (from e in Context.MyEntities group e by e.Date.GetWeekOfYear() into g select g).ToList();
【讨论】:
您可以使用以下格式使用 linq 和 lambda 表达式
按天分组
var results = from p in db.table
group p.data by p.DateTime.UtcNow.Day into g
select new { Id = g.Key, parameters = g };
按周分组
var result = from p in db.table
group p.data by p.DateTime.UtcNow.DayOfWeek into g
select new { Id = g.Key, parameters = g}
否则
//get the 7days of the week by the below method and perform between operation
DateTime fromDate = DateTime.Today.Subtract(new TimeSpan(7, 0, 0, 0));
DateTime today = DateTime.Today;
var result = from p in db.table
group p.data by (DbFunctions.TruncateTime(today) && DbFunctions.TruncateTime(today) >= DbFunctions.TruncateTime(fromDate)) into g
select new { Id = g.Key, parameters = g}
月份类似
DateTime fromDate = DateTime.Today.Subtract(new TimeSpan(30, 0, 0, 0));
DateTime today = DateTime.Today;
var result = from p in db.table
group p.data by (DbFunctions.TruncateTime(today) && DbFunctions.TruncateTime(today) >= DbFunctions.TruncateTime(fromDate)) into g
select new { Id = g.Key, parameters = g}
【讨论】: