Как мне обрабатывать дату и время без дня в сравнении linq? - PullRequest
0 голосов
/ 05 февраля 2020

Мне даны две строки в виде строк:

Beginning month:  10
Beginning year: 2010
Ending month:  01
Ending Year 2020

Я хочу запросить мою сущность и получить все, что равно или находится между этими диапазонами.

Итак, я хочу все с 10/2010 по 01 / 2020.

У меня есть этот код, и я застрял на том, как правильно преобразовать дату и сравнение:

     dollartotals = (from x in se.AchBatches
      where x.CompanyCode == company &&
            DbFunctions.TruncateTime(x.DateTimeSubmitted) >=  
              // stuck here
      select x.DollarTotal).Sum();

Как мне обрабатывать отдельный месяц / год строки и сделать сравнение даты без дня?

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Вы хотите сравнить с фактической отправленной датой-временем, а не с усеченной версией.

Ключ заключается в том, чтобы заранее построить фактические даты-даты, а затем просто проверить окно обычной даты.

Предположим, у вас есть четыре строки, как указано в вашем вопросе:

//you might use TryConvert or a Try block here to validate your string data...
int beginYear = Integer.Convert(strBeginYear);
int beginMonth = Integer.Convert(strBeginMonth);
int endYear = Integer.Convert(strEndYear);
int endMonth = Integer.Convert(strEndMonth);

DateTime start = new DateTime(beginYear, beginMonth, 1);
DateTime endLimit = new DateTime(endYear, endMonth, 1).AddMonths(1);

dollartotals = (from x in se.AchBatches
      where x.CompanyCode == company &&
            x.DateTimeSubmitted >= start &&
            x.DateTimeSubmitted < endLimit
      select x.DollarTotal).Sum();
0 голосов
/ 05 февраля 2020

Я хочу все с 10/2010 по 01 / 2020.

Не уверен, что вам нужна последовательность DateTime с каждым тиком между этими датами, или каждой секундой, или каждым днем. Давайте предположим, что вы хотите каждый день: все дни от startDate.Date до включительно endDate.Date.

Я использую StartDate.Date, поэтому если StartDate 2020-20-05 13:20:14, то вы все равно получить 5 февраля 2020 года в 00: 00: 00

IEnumerable<DateTime> GetDateRange(DateTime startDate, DateTime endDate)
{
    DateTime lastDate = endDate.Date;
    DateTime date = startDate.Date;
    while (date <= lastDate)
    {
        yield return date;
        date = date.AddDays(+1);
    }
}

Использование:

var allDaysOfFebruary2020 = GetDateRange(new DateTime(2020, 01, 01),
                                         new DateTime(2020, 02, 29));

Вы получите последовательность с 1 февраля 2020 года до 29 февраля 2020 года включительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...