我有一个称为消息的表。我有一个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();
理想情况下,我希望每个月获得一次邮件计数,但是很高兴能像上面的代码一样一次获得一次。
答案 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();