在 LINQ to SQL 查询中按日期获取记录数,即使没有结果也是如此
本文关键字:结果 取记录数 SQL to LINQ 查询 日期 | 更新日期: 2023-09-27 18:36:56
我编写了以下 LINQ-to-SQL,使我能够按天获取记录总数。
我想对它进行一些修改,以使其符合我的需求。我已经做了各种尝试,但都没能做到正确。
我想列出过去 9 天,即使在此期间没有"开放"。我还想按日/月分组,而不是像下面那样只按天分组。
我希望获得的输出示例是:
DateString Opens
===================
9/5 0
10/5 0
11/5 3
等。。。
public List<OpensOverTimeViewModel> GetOpensOverTimeViewModel(int eId)
{
DateTime lastDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).AddDays(-9);
DateTime currentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).AddDays(1);
var summary = (from p in db.Opens
where (p.ElementId == eId) && (p.Timestamp >= lastDate) && (p.Timestamp <= currentDate)
let k = new
{
Day = p.Timestamp.Day
}
group p by k into t
select new OpensOverTimeViewModel
{
DateString = t.Key.Day,
TotalOpens = t.Count(),
ElementName = ""
}).ToList();
return summary;
}
有关如何最好地解决此问题的任何帮助将不胜感激。
从数据库获取结果后,可以在代码中创建左联接
将以下行放在return summary;
行之前。
var allDates = from idx in Enumerable.Range(0, (currentDate - lastDate).Days)
select lastDate.AddDays(idx);
summary = (
from allDate in allDates
join su in summary on allDate.Day equals su.DateString into x
from su in x.DefaultIfEmpty()
select new OpensOverTimeViewModel
{
DateString = allDate.Day,
TotalOpens = su == null ? 0 : su.TotalOpens,
ElementName = ""
}).ToList();
要按天/月分组,我建议使用整个日期,用t.Key.Date
替换t.Key.Day
并将DateString
更改为DateTime
。