首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么一次性将日累计、月累计、年累计统计出来

2012-01-26 
如何一次性将日累计、月累计、年累计统计出来表结构如下:【ID】guid类型【Date】日期类型【Name】文本类型【Categor

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

热点排行