Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ to SQL查询中按日期获取记录数,即使没有结果_C#_Linq_Entity Framework_Linq To Sql - Fatal编程技术网

C# 在LINQ to SQL查询中按日期获取记录数,即使没有结果

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

我已经编写了以下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;
}
公共列表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}上分组。”
。你好,阿尔宾。感谢你对这个问题的回答,但你能否给我举个例子来说明一些情况。我似乎无法很好地解释这个问题!谢谢你,尼克。