如何在LINQ查询中设置InvoiceDate条件,统计当月已完成车辆记录数?
解决方法
先修正代码里的逻辑问题,再补充InvoiceDate的当月判断条件:
- 原代码里的
IQueryable<T>查询对象永远不会为null,所以monthlyStatus == null的判断无效 - 直接把查询对象转字符串无法得到记录数,需要用
Count()方法统计
正确代码实现
public void MonthlyStatus(NetContext context) { var currentYear = DateTime.Now.Year; var currentMonth = DateTime.Now.Month; // 统计当月状态为Finish的车辆记录数 var finishedCount = context.CarInformation .Count(car => car.CurrentSituation == "Finish" && car.InvoiceDate.HasValue // 先确保日期字段不为空 && car.InvoiceDate.Value.Year == currentYear && car.InvoiceDate.Value.Month == currentMonth); label1.Text = finishedCount.ToString(); }
关键说明
- 如果
InvoiceDate是可空类型(DateTime?),必须先通过HasValue判断是否有值,避免空引用异常 - 同时匹配年份和月份,确保统计的是当前自然月的记录,而非过去30天
- 直接用
Count()方法会转换成SQL的COUNT语句,比先查询所有记录再计数更高效
如果需要统计过去30天而非自然月,可将日期条件替换为:
&& car.InvoiceDate.HasValue && car.InvoiceDate.Value >= DateTime.Now.AddDays(-30)
内容的提问来源于stack exchange,提问作者Erkan Kesemen
相关产品推荐
相关产品推荐

