Я использовал эту технику местами, например, класс Payment имеет соответствующий класс PaymentLinqExtensions, который предоставляет специфичные для домена расширения для платежей.
В приведенном вами примере я бы выбрал более описательное имя метода. Существует также вопрос, является ли диапазон включительным или исключительным, в противном случае он выглядит хорошо.
Если в вашей системе несколько объектов, для которых распространена концепция наличия даты, рассмотрите интерфейс, возможно, IHaveADate (или что-то лучше: -)
public static IQueryable<T> WithinDateRange(this IQueryable<T> source, DateTime from, DateTime to) where T:IHaveADate
(IQueryable интересен. Я не думаю, что IEnumerable может привести к нему что-то позорное. Если вы работаете с запросами к базе данных, то это может позволить вашей логике появляться в окончательном SQL, который отправляется на сервер, который это хорошо. Есть потенциальная ошибка со всем LINQ, что ваш код не выполняется, когда вы ожидаете, что он будет)
Если диапазоны дат являются важной концепцией в вашем приложении, и вам необходимо быть последовательным в отношении того, начинается ли диапазон в полночь в конце «EndDate» или в полночь в его начале, тогда класс DateRange может быть полезен. Тогда
public static IQueryable<T> WithinDateRange(this IQueryable<T> source, DateRange range) where T:IHaveADate
Вы также можете, если хотите, предоставить
public static IEnumerable<T> WithinDateRange(this IEnumerable<T> source, DateRange range, Func<DateTime,T> getDate)
но это для меня больше похоже на DateRange. Я не знаю, сколько это будет использовано, хотя ваша ситуация может отличаться. Я обнаружил, что слишком общий подход может усложнить понимание, а LINQ может быть трудно отладить.
var filtered = myThingCollection.WithinDateRange(myDateRange, x => x.Date)