使用LINQ获取2个日期之间的日期发生次数

时间:2019-01-06 23:45:27

标签: c# linq-to-entities

我有一个称为消息的表。我有一个messagedate字段。我想计算在2个日期之间出现messagedate的次数。

我无法在linq中制定查询。

string currYear = DateTime.Now.Year.ToString();
var TotalSmsJan = (from x in db.Messages
                                     where (x.MessageDate  >= '1/1/@currYear') && (x.MessageDate >= '1 /31/@currYear')   
                                     select x).Count();

理想情况下,我希望每个月获得一次邮件计数,但是很高兴能像上面的代码一样一次获得一次。

2 个答案:

答案 0 :(得分:1)

像对待代码一样,将字符串作为日期进行处理并不是最佳选择。

以下代码使用日期而不是字符串,并且使用与当前代码相同的基本结构。不过,这将需要12个查询(每月一个)。

var currYear = DateTime.Now.Year;

for (int month = 1; month <= 12; month++)
{
    var firstOfThisMonth = new DateTime(currYear, month, 1);
    var firstOfNextMonth = firstOfThisMonth.AddMonths(1);

    var totalSMS = (from x in db.Messages
                    where x.MessageDate >= firstOfThisMonth && x.MessageDate < firstOfNextMonth
                    select x).Count();
}

答案 1 :(得分:-1)

这是您最初的Linq声明:

string currYear = DateTime.Now.Year.ToString();
var TotalSmsJan = (from x in db.Messages
                                     where (x.MessageDate  >= '1/1/@currYear') && (x.MessageDate >= '1 /31/@currYear')   
                                     select x).Count();

您在问:

  

理想情况下,我希望每个月获得一次邮件计数,但是很高兴能像上面的代码一样一次获得一次。

您可以将其更改为:

string currYear = DateTime.Now.Year.ToString();
var TotalSmsJan = (from x in db.Messages
                                     where (x.MessageDate  >= '1/1/@currYear') && (x.MessageDate >= '1 /31/@currYear')   
                                     select x);
var totalCount = TotalSmsJan.Count();
var totalForPeriod = TotalSmsJan.Where(s => s.MessageDate >= 'your lower date' && s.MessageDate <= 'your upper date').Count();