C# 在LINQ to SQL查询中按日期获取记录数,即使没有结果
我已经编写了以下LINQ to SQL,以使我能够每天获得总记录数 我想对它做一些修改,以使它符合我的需要。我做了各种尝试,但都没有成功 我想列出过去的9天,即使这段时间没有“打开”。 我还想按天/月分组,而不是像下面那样只按天分组 我希望得到的输出示例如下:C# 在LINQ to SQL查询中按日期获取记录数,即使没有结果,c#,linq,entity-framework,linq-to-sql,C#,Linq,Entity Framework,Linq To Sql,我已经编写了以下LINQ to SQL,以使我能够每天获得总记录数 我想对它做一些修改,以使它符合我的需要。我做了各种尝试,但都没有成功 我想列出过去的9天,即使这段时间没有“打开”。 我还想按天/月分组,而不是像下面那样只按天分组 我希望得到的输出示例如下: DateString Opens =================== 9/5 0 10/5 0 11/5 3 等等 public List<OpensOverTimeVie
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;
}
公共列表GetOpensOverTimeViewModel(int-eId)
{
DateTime lastDate=新的日期时间(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day).AddDays(-9);
DateTime currentDate=新的日期时间(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day).AddDays(1);
var summary=(从数据库中的p开始)打开
其中(p.ElementId==eId)&&&(p.Timestamp>=lastDate)&(p.Timestamp您可以在从数据库获得结果后创建左连接代码
将以下几行放在您的返回摘要;
行之前
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.day
替换为t.Key.date
,并将DateString
更改为DateTime
您可以替换新的DateTime(DateTime.Now.Year,DateTime.Now.month,DateTime.Now.day)
与日期时间。今天
。感谢您的精彩回答。我现在唯一的问题是如何将dd/MM列为日期字符串。当我连接字符串时,LINQ与SQL compliains。LINQ to实体中不支持指定的类型成员“日期”。只支持初始值设定项、实体成员和实体导航属性。“Hi Albin-这不起作用,并产生与上面相同的错误。如果您的数据库日期有空的时间部分,您可以使用t.Key
而不是t.Key.Date
,如果没有,您需要在新建{t.Key.Day,t.Key.Month,t.Key.Year}上分组。”
。你好,阿尔宾。感谢你对这个问题的回答,但你能否给我举个例子来说明一些情况。我似乎无法很好地解释这个问题!谢谢你,尼克。