Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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# 从数据库获取指定日期范围的记录计数,如果其中一个日期不存在记录,则将计数返回为';0';_C#_Linq_Date - Fatal编程技术网

C# 从数据库获取指定日期范围的记录计数,如果其中一个日期不存在记录,则将计数返回为';0';

C# 从数据库获取指定日期范围的记录计数,如果其中一个日期不存在记录,则将计数返回为';0';,c#,linq,date,C#,Linq,Date,我想要指定日期范围的数据库记录列表(包含小时数和日期) 若某个日期的记录在数据库中不可用,那个么该日期应该在count=0的列表中 // Where GetDateWistUsage is... public List<GraphData> GetDateWiseUsage(DateTime startDate, DateTime endDate) { return Set.Where(x => x.Date >= startDate.Date &&am

我想要指定日期范围的数据库记录列表(包含小时数和日期)

若某个日期的记录在数据库中不可用,那个么该日期应该在count=0的列表中

// Where GetDateWistUsage is...

public List<GraphData> GetDateWiseUsage(DateTime startDate, DateTime endDate)
{
    return Set.Where(x => x.Date >= startDate.Date && x.Date < endDate.Date)
        .GroupBy(x => x.Date)
        .Select(x => new GraphData { Date = x.Key.Date, TotalHoursCount = x.Sum(i => i.TotalHours }).ToList();
}

// Where GraphData is
public class GraphData
{
     public DateTime Date { get; set; }
     public double TotalHoursCount { get; set; }
}
//GetDateWistUsage在哪里。。。
公共列表GetDateWiseUsage(日期时间开始日期、日期时间结束日期)
{
返回集合。其中(x=>x.Date>=startDate.Date&&x.Datex.Date)
.Select(x=>newgraphdata{Date=x.Key.Date,totalhourscont=x.Sum(i=>i.TotalHours}).ToList();
}
//GraphData在哪里
公共类图形数据
{
公共日期时间日期{get;set;}
公共双TotalHoursCount{get;set;}
}

这里,假设我们将日期从2018年12月1日传递到2018年12月20日,并且2018年12月15日数据库中不存在任何记录。在这种情况下,列表中还应包含TotalHoursCount=0的2018年12月15日,您应该创建一些虚拟数据来填补空白。由于您正在进行一个
求和
,您可以创建一些输入数据的虚拟数据

为此,我假设
Set
List
-根据需要更改此选项:

public class SourceData
{
    public DateTime Date { get; set; }
    public long TotalHours { get; set; }
}

public class GraphData
{
    public DateTime Date { get; set; }
    public long TotalHoursCount { get; set; }
}
然后,我添加了一个方法来获取日期范围(上限独占):

公共静态IEnumerable GetDateRange(DateTime startDate、DateTime endDate)
{
返回可枚举的.Range(0,(endDate-startDate.Days)。选择(d=>startDate.AddDays(d));
}
最后,我更新了GetDataWiseUsage方法以生成日期范围并将其转换为虚拟源数据:

public static List<GraphData> GetDateWiseUsage(DateTime startDate, DateTime endDate)
{
    return Set.Where(x => x.Date >= startDate.Date && x.Date < endDate.Date)
    .Concat(GetDateRange(startDate, endDate).Select(date => new SourceData() { Date = date, TotalHours = 0 }))
    .GroupBy(x => x.Date.Date)
    .Select(x => new GraphData { Date = x.Key, TotalHoursCount = x.Sum(i => i.TotalHours) }).ToList();
}
公共静态列表GetDateWiseUsage(DateTime startDate、DateTime endDate)
{
返回集合。其中(x=>x.Date>=startDate.Date&&x.Datenew SourceData(){date=date,TotalHours=0}))
.GroupBy(x=>x.Date.Date)
.Select(x=>newgraphdata{Date=x.Key,totalhourscont=x.Sum(i=>i.TotalHours)}.ToList();
}
我已将您的代码更改为group by
x.Date.Date
而不是
x.Date
,因为您似乎希望每天单独分组,而不是按唯一时间分组。group by不会将虚拟数据与真实数据分组,并将其计入总和


您可以在之后添加虚拟数据,但似乎更容易/更少的事先工作。

您可能希望向我们展示应用程序的正确部分。GetDateWiseUsage必须返回正确的数据,当然?即使您希望在API方法中进行更改,我们也不知道
AppUsageGraph
是什么类型。感谢John的帮助询问详细信息。我已经编辑了问题,这对理解我的问题陈述有帮助吗?你能不能也包括GetDateWiseUsage方法,基本上包括数据库查询?嘿,John,我已经删除了不需要的方法,并在代码下面添加了一些额外的描述,希望这将有助于理解实际问题…您可能需要为丢失的日期生成一个日期范围,并将其与其他数据集成。
public static List<GraphData> GetDateWiseUsage(DateTime startDate, DateTime endDate)
{
    return Set.Where(x => x.Date >= startDate.Date && x.Date < endDate.Date)
    .Concat(GetDateRange(startDate, endDate).Select(date => new SourceData() { Date = date, TotalHours = 0 }))
    .GroupBy(x => x.Date.Date)
    .Select(x => new GraphData { Date = x.Key, TotalHoursCount = x.Sum(i => i.TotalHours) }).ToList();
}