如何使用linq每月获取当年的记录

时间:2019-05-15 05:28:09

标签: c# linq

创建日期时,我必须使用linq来获取每月的记录数。 我需要一份包含12个月记录的清单。如果没有特定月份的记录,那么我必须获得0而不是null,否则我需要该月份的原始计数。 我在sql中做过同样的事情,请查看查询:-

SELECT 
      Count(JobId)
     ,MONTHNAME(createdOn) 
FROM bec_dev.jobs 
WHERE year(createdOn) = year(now()) 
GROUP BY month(createdOn);

我想在linq中做同样的事情

2 个答案:

答案 0 :(得分:1)

var result = <DataContext>.<YourTable>
.Where(p => p.createdOn.Year == DateTime.Now.Year)
.GroupBy(p => p.createdOn.Month)
.Select(p => new {Month = p.Key, Count = p.Count()});

之后,使用框架提供的全球化功能将月份号解析为月份名称,例如

System.Globalization.DateTimeFormatInfo dtfi = new 
System.Globalization.DateTimeFormatInfo();
string strMonthName = dtfi.GetMonthName(monthNumber).ToString();

答案 1 :(得分:1)

请尝试这个。我认为这对您有用。 :)

     var months = Enumerable.Range(1, 12)
            .Select(x => new {
                year = DateTime.Now.Year,
                month = x
            });

var data = months.GroupJoin(
        ObjContext.yourtable.Where(j => j.ClientId == jobsFilterRequest.ClientId 
        && j.CreatedOn.Year == DateTime.Now.Year),
        m => new { month = m.month, year = m.year },
        revision => new {
            month = revision.CreatedOn.Month,
            year = revision.CreatedOn.Year
        },
        (p, g) => new ResponseMonthlyCount
        {
            MonthName = MonthNames[p.month -1],
            TotalJobs = g.Count()
        }).ToList();