您的位置:首页 > 数据库

LINQ To SQL 中 聚合函数的使用问题

2009-04-15 16:42 453 查看
internal static object SelectDonationStatByDate(int endUserID, DateTime startDate, DateTime endDate)
{
GoodTreeDataContext db = new GoodTreeDataContext();
IList<DonationStat> donationStats = new List<DonationStat>();
DonationStat donationStat = null;

var q = from p in db.Donation
where p.EndUserID == endUserID
group p by p.DonationCategory into g
select new
{
DonationCategory = g.Key,
TotalAmount = g.Where(i => Convert.ToDateTime(i.Date) >= startDate & Convert.ToDateTime(i.Date) <= endDate).Sum(d => d.Amount) == null ? 0 : g.Where(i => Convert.ToDateTime(i.Date) >= startDate & Convert.ToDateTime(i.Date) <= endDate).Sum(d => d.Amount)
};

int j = 1;
foreach (var item in q)
{
donationStat = new DonationStat();
donationStat.DonationCategory = item.DonationCategory;
donationStat.TotalAmount = item.TotalAmount;
donationStat.StartDate = startDate;
donationStat.EndDate = endDate;
donationStat.ID = j;

donationStats.Add(donationStat);
j++;
}

return donationStats;
}

internal static object SelectDonationStatByDate(int endUserID, DateTime startDate, DateTime endDate)
{
GoodTreeDataContext db = new GoodTreeDataContext();
IList<DonationStat> donationStats = new List<DonationStat>();
DonationStat donationStat = null;

var q = from p in db.Donation
group p by p.DonationCategory into g
select new
{
DonationCategory = g.Key,
TotalAmount = g.Where(i => Convert.ToDateTime(i.Date) >= startDate & i.EndUserID == endUserID & Convert.ToDateTime(i.Date) <= endDate).Sum(d => d.Amount) == null ? 0 : g.Where(i => Convert.ToDateTime(i.Date) >= startDate & Convert.ToDateTime(i.Date) <= endDate).Sum(d => d.Amount)
};

int j = 1;
foreach (var item in q)
{
donationStat = new DonationStat();
donationStat.DonationCategory = item.DonationCategory;
donationStat.TotalAmount = item.TotalAmount;
donationStat.StartDate = startDate;
donationStat.EndDate = endDate;
donationStat.ID = j;

donationStats.Add(donationStat);
j++;
}

return donationStats;
}

两种语句的结果有所不同,更确切的说第一种语句才能得出正确的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: