首页 > 解决方案 > 基于日期的两个表的计数

问题描述

我有两个表 寄存器IAApplications如下

寄存器

Name                                   Email                           Creationdate
Mazhar                                Khan@gmail.com              2018-09-02 13:08:32.303
mohan                                 m@gmail.com                 2018-09-01 13:08:32.303
kjdj                                  k@gmail.com                 2018-09-01 13:08:32.303

IAApplications

Title                Sector                   SubmissionDate
 kk                     jj                  2018-09-03 13:08:32.303 
 kk                     jj                  2018-09-02 13:08:32.303 
 mm                     tt                  2018-09-01 13:08:32.303

我的报告需要以下输出

Date            New Registratio          New Application   
09-03-2018         0                         1
09-02-2018         1                         1             
09-01-2018         2                         1   

我试过下面的代码得到错误的数据

  var Regs = from o in db.Registers
                   select new { A = (o.Creationdate) };
        var Apps = from c in db.IAApplications
                   select new { A = (c.SubmissionDate) };


        var result = (from x in Regs.Concat(Apps)
                      group x by x.A into og
                      select new { Date = og.Key, Reg = og.Count(), App = og.Count() }).ToList();  

在我的本地系统中,我得到了错误的结果,如下图所示,我有很多数据,但没有提到上表问题。

在此处输入图像描述

我知道我的查询中有一些错误,这就是为什么日期没有显示分组依据和数据计数的原因

我更喜欢这个例子

标签: c#asp.netlinqasp.net-mvc-5

解决方案


通常,您必须有过滤器dateStartdateEnd

然后,对于该范围内的每个日期,您检查在给定日期是否有注册或申请

var dateStart = new DateTime(2018,9,1);
var dateEnd = DateTime.Now;
var list = new List<Tuple<DateTime, int, int>>(); // structure to store DateTime, New Registratio, New Application   
for(var i = dateStart; i.Date <= dateEnd.Date;  i = i.AddDay(1))
{
    list.Add(Tuple.Create(i,
                          db.Registers.Count(r => r.Creationdate.Date == i.Date), 
                          db.IAApplications.Count(r => r.SubmissionDate.Date == i.Date)));
}
var result = list.Select(og => new { Date = og.Item1, Reg = og.Item2, App = og.Item3 }).ToList();

如果您没有预定义dateStartdateEnd这些值来自min/max2 个表


推荐阅读