日期:2014-05-20  浏览次数:21083 次

如何一次性将日累计、月累计、年累计统计出来
表结构如下:
 【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()
                       };