如何一次性将日累计、月累计、年累计统计出来
表结构如下:
【ID】guid类型
【Date】日期类型
【Name】文本类型
【Category】文本枚举类型
【IsActive】逻辑类型
【Quantity】整形
现要求:给定一个日期,统计出这个该日期的 Quantity 之和,截止到该日期的当月的 Quantity 之和,截止到该日期的当年的 Quantity 之和,按 Name 和 IsActive 分组,结果如下:
Name IsActive DaySum MonthSum YearSum
--------------------------------------
aaa true 100 1000 10000
aaa false 200 2000 20000
bbb true 300 3000 30000
bbb false 400 4000 40000
...
实体类型与数据表结构相同,请教用 linq 语句如何实现?
------解决方案--------------------
Try:
DateTime dt=...;//这是给定的日期
var query=from t in db.TableA
where System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(dt,t.Date)<=365
group t by new {t.Name,t.IsActive} into g
select new
{
Name=g.Key.Name,
IsActive=g.Key.IsActive,
DaySum=g.Where(m=>System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(dt,m.Date)<=1).Count(),
MonthSum=g.Where(m=>System.Data.Linq.SqlClient.SqlMethods.DateDiffMonth(dt,m.Date)<=1).Count(),
YearSum=g.Count()
};
------解决方案--------------------C# code
var result=from u in db.Table
group u by new
{
u.Name,
u.IsActive
}
into g
select new
{
DaySum =g.Sum(c=>c.Quantity),
MonthSum =(from n in g
where n.Date.AddDays(-yourDate.Day)<n.Date<yourDate
select n.Quantity).Sum(),
YearSum=(from n in g
where n.Date.AddMonths(-yourDate.Month).AddDays(-yourDate.Day)<n.Date<yourDate
select n.Quantity).Sum()
};