Сравните прошлые даты в LINQ - PullRequest
       0

Сравните прошлые даты в LINQ

1 голос
/ 09 сентября 2011

Мне нужно написать оператор LINQ, который определяет, сколько раз элемент появлялся в базе данных за последние 90 дней.Это легко, но они хотят видеть данные с точки зрения 1-30 дней, 31-60 дней и 61-90 дней.

В настоящее время я занимаюсь созданием модели, которая имеет четыре набораданных, получая список всех уникальных SKU, а затем определяя, сколько раз они появляются в базе данных.

Моя проблема заключается в диапазонах дат.Я создаю новые объекты DateTime и добавляю к ним ОТРИЦАТЕЛЬНЫЕ дни, и пытаюсь использовать это для сравнения диапазонов.Я не могу понять, как сказать что-то вроде этого:

Дата редактирования от (-30 дней) до (-60 дней).

Я не могу использовать SP для этого,Должен быть более легкий путь.Может быть, использовать промежуток времени и посмотреть, попадает ли он в этот промежуток?Я не уверен.Я редко работаю с датами.

Ответы [ 5 ]

5 голосов
/ 09 сентября 2011

Что-то вроде:

DateTime today = DateTime.Today;
DateTime minusThirty = today.AddDays(-30);
DateTime minusSixty = today.AddDays(-60);

// Normally I wouldn't use a query expression for just a single where clause,
// but I assume you want more...
var query = from item in db.Table
            where item.Date >= minusSixty && item.Date < minusThirty
            select item;

Вы можете хотеть <= и > вместо этого - вы должны решить это для себя.Тем не менее, вы почти наверняка хотите, чтобы один был обязательно включенным, а один - эксклюзивным, и используйте их последовательно - таким образом, ни один элемент не окажется в более чем одном ведре.

1 голос
/ 09 сентября 2011
DateTime date1 = DateTime.Now().AddDays(-30);
DateTime date2 = DateTime.Now().AddDays(-60);

if (yourDate.Date >= date2.Date && yourDate.Date <= date1.Date)
{
   //DoSomething
} 
0 голосов
/ 11 февраля 2015

мне показалось, что это работает VB.NET 3.5 возвращает список товаров за последние 10 минут ... Я уверен, что его можно настроить в соответствии с вашими потребностями

    ' if online time is greater than 10 minutes ago pickup user                                check onLineTime.Date = now.AddMinutes(-10).Date              check onLineTime.TimeOfDay = now.AddMinutes(-10).TimeOfDay
     Dim rsl = From s In db.tblSessions Where (s.SessionID <> context.Session.SessionID AndAlso s.onLineTime.Date = DateTime.Now.AddMinutes(-10).Date AndAlso s.onLineTime.TimeOfDay > DateTime.Now.AddMinutes(-10).TimeOfDay)

где s.onLineTime - поле SQL DATETIME, т.е. 2015-02-11 04: 49: 26.283

0 голосов
/ 09 сентября 2011

Трудно написать запрос LINQ, когда вы не уверены в своей структуре. Но чтобы получить этот диапазон дат, вы можете сделать что-то вроде этого в коде:

var difference = laterDate - earlierDate;

if (difference <= TimeSpan.FromDays(60) && difference >= TimeSpan.FromDays(30)) ...
0 голосов
/ 09 сентября 2011

Почему бы тебе не сделать что-то вроде

        TimeSpan beginning = TimeSpan.FromDays(30);
        TimeSpan end = TimeSpan.FromDays(60);

        var query = from item in database
                    let difference = DateTime.Now - item.TimeStamp
                    where difference > beginning &&
                          difference < end
                    select item;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...