创建日期时,我必须使用linq
来获取每月的记录数。
我需要一份包含12个月记录的清单。如果没有特定月份的记录,那么我必须获得0而不是null,否则我需要该月份的原始计数。
我在sql中做过同样的事情,请查看查询:-
SELECT
Count(JobId)
,MONTHNAME(createdOn)
FROM bec_dev.jobs
WHERE year(createdOn) = year(now())
GROUP BY month(createdOn);
我想在linq中做同样的事情
答案 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();