Получить количество встречаемости дат между 2 датами, используя LINQ - PullRequest
0 голосов
/ 07 января 2019

У меня есть таблица с именем messages. У меня есть поле для сообщений. Я хочу посчитать, сколько раз сообщения происходят между двумя датами.

У меня проблемы с формулировкой запроса в 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 голосов
/ 07 января 2019

Это ваше оригинальное утверждение 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();
0 голосов
/ 07 января 2019

Обрабатывать строки как даты, как в вашем коде, не оптимально.

В приведенном ниже коде используются даты, а не строки, и используется та же базовая структура, что и в текущем коде. Хотя потребуется 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...