C# 获取系统外日期时间的月份

C# 获取系统外日期时间的月份,c#,linq-to-sql,C#,Linq To Sql,我的数据库中有包含以下字段的数据 Id | name | RegDate 1 John 2014-09-05 2 mike 2014-09-05 3 Duke 2014-10-14 我正在执行一个查询,以计算注册日期等于09的值的数量。09是日期的月份 我试图将我存储在db中的日期转换为月份格式,然后获取系统日期的新月份以获得结果 这是我在linq中的查询,但它不断给出错误的计数。我需要你的帮助。谢谢 var CountPassengers = (from c i

我的数据库中有包含以下字段的数据

Id | name | RegDate
1    John   2014-09-05
2    mike   2014-09-05
3    Duke   2014-10-14
我正在执行一个查询,以计算注册日期等于09的值的数量。09是日期的月份

我试图将我存储在db中的日期转换为月份格式,然后获取系统日期的新月份以获得结果

这是我在linq中的查询,但它不断给出错误的计数。我需要你的帮助。谢谢

var CountPassengers = (from c in db.CountPassengerManifestViews where c.DepartureDate.Month.ToString()== DateTime.Now.AddMonths(-1).ToString("MM")  select c).Count();
我强烈建议您摆脱所有的字符串操作。您的查询在概念上与字符串没有任何关系,那么为什么要将它们引入代码中呢

您可以将查询编写为:

int currentMonth = DateTime.Today.AddMonths(-1).Month;

var passengerCount = db.CountPassengerManifestViews
                       .Count(c => c.DepartureDate.Month == currentMonth);
然而,这将只按月份过滤——它不会按月份和年份过滤,所以如果你有2013年的数据,也会包括在内。更可能的情况是,您想要的是:

DateTime oneMonthAgo = DateTime.Today.AddMonths(-1);
DateTime start = oneMonthAgo.AddDays(1 - oneMonthAgo.Day);
DateTime end = start.AddMonths(1);

var passengerCount = db.CountPassengerManifestViews
                       .Count(c => c.DepartureDate >= start &&
                                   c.DepartureDate < end);
DateTime oneMonthAgo=DateTime.Today.AddMonths(-1);
DateTime start=oneMonthAgo.AddDays(1-oneMonthAgo.Day);
DateTime end=start.AddMonths(1);
var passengerCount=db.countpassengernifestviews
.Count(c=>c.DepartureDate>=开始&&
c、 出发日期<结束日期);
这样,您就可以表达一系列日期,而不仅仅是提取月份部分。

试试这个

var CountPassengers = (from c in db.CountPassengerManifestViews 
                       where c.DepartureDate.Month.ToString("MM")== DateTime.Now.AddMonths(-1).ToString("MM")  
                       select c).Count();

我不知道为什么要进行字符串操作,但如果只想比较两个日期的月份部分,请执行以下操作:

where c.DepartureDate.Month== DateTime.Now.AddMonths(-1).Month

您不需要比较字符串表示,因为它已经转换为DateTime对象,所以按您的方式来做是没有意义的。这个简单的更改应该足够了。

我认为您的代码将Month.ToString()表示“9”与ToString(“MM”)表示“09”进行了比较。 您还可以通过删除“.ToString()”进行改进:


问候

谢谢你们的回答,你们说得对。ToString就是问题所在。现在问题解决了。谢谢again@HarunaAdo当前位置这并不能真正解决问题,除非你一直试图将一年中这个月的所有内容都包括在内。。。虽然这可能是你想要做的,但有点奇怪。(我还强烈建议使用带有谓词的
Count
,而不是在调用
Count()
之后使用无意义的查询表达式)
var month = DateTime.Now.AddMonths(-1).Month;            
var CountPassengers = db.CountPassengerManifestViews.Count(c => c.DepartureDate.Month == month);
 int lastMonth = DateTime.Now.AddMonths(-1).Month;
 var CountPassengers = (from c in db.CountPassengerManifestViews where c.DepartureDate.Month == lastMonth select c).Count();
var month = DateTime.Now.AddMonths(-1).Month;            
var CountPassengers = db.CountPassengerManifestViews.Count(c => c.DepartureDate.Month == month);