Во-первых, этот запрос неверен с точки зрения времени в течение года - вам может быть 17 лет, и все равно считается, например, 18 - очень немногие люди, родившиеся в 1993 году, на сегодняшний день 18 (17 января 2011 года).Кроме того, он вычисляет DateTime.Now
несколько раз, что означает, что год может варьироваться , пока выполняется запрос .
Наконец, если у вас есть только одно предложение where
и вашselect
предложение не допускается, как правило, проще использовать синтаксис метода расширения, а не выражение запроса.
Я бы предложил:
DateTime today = DateTime.Today;
DateTime min = today.AddYears(-ub);
DateTime max = today.AddYears(-lb);
var years = employee.Where(e => e.DOB != null && e.DOB >= min && e.DOB <= max);
РЕДАКТИРОВАТЬ: для большей ясности,для максимального возраста (скажем) 10 лет это означает, что вы хотите исключить любого, чья дата рождения была 11 лет назад или более, поэтому вы должны написать:
DateTime today = DateTime.Today;
DateTime min = today.AddYears(-(maxAge + 1));
DateTime max = today.AddYears(-minAge);
var years = employee.Where(e => e.DOB != null && e.DOB > min && e.DOB <= max);