Фильтрация по дате (linq) - PullRequest
0 голосов
/ 04 октября 2011

У меня есть поле DateTime с именем «repeat» в базе данных.Я хочу взять только те записи, в которых Дата в «повтор» сегодня.

Я пробовал:

(...).Where(e => e.repeat.Value.Date.Day.Equals(DateTime.Now.Day));

или:

(...).Where(e => e.repeat.Value.Date.Day==DateTime.Now.Day);

, но это не работает.

Есть идеи?

Спасибо, Камил

Ответы [ 4 ]

2 голосов
/ 04 октября 2011

«Это не работает» довольно расплывчато, но в настоящее время вы проверяете день недели , а не дату.Я бы предложил использовать:

Date today = DateTime.Today;

var query = ....Where(e => e.repeat.Value.Date == today);

РЕДАКТИРОВАТЬ: Не ясно, какие типы здесь задействованы - если repeat.Value не является DateTime, вы можете захотеть:

var query = ....Where(e => e.repeat.Value.Date.Date == today);
1 голос
/ 04 октября 2011

Попробуйте:

(...).Where(e => (e.repeat >= DateTime.Today) && (e.repeat < DateTime.Today.AddDays(1)))
0 голосов
/ 05 апреля 2018

Экспертное решение: используйте DbFunctions.CreateDateTime () в запросе Linq.

var date = DateTime.Now.AddDays(-1).Date;

var actions = await _context.Set<Your_table>()
        .AsNoTracking()
        .Where(x => DbFunctions.CreateDateTime(x.YourColumn.Value.Year, x.YourColumn.Value.Month, x.YourColumn.Value.Day, 0, 0, 0) == date)
        .ToListAsync();
0 голосов
/ 04 октября 2011

Сравнение короткой даты гарантирует, что год / месяц / день совпадают в одном кадре:

(...).Where(e => e.repeat.Value.Date.ToShortDateString() == DateTime.Now.ToShortDateString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...