表结构如下:
【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() };