Comments 5
Как то не разглядел в статье — как же именно реализован WhereOverlap.
WhereOverlap это extension для IQueryable
Полный код на GitHub.
Пример использования.
public static IQueryable<TEnt> WhereOverlap<TEnt, TProp>(
this IQueryable<TEnt> source,
Expression<Func<TEnt, TProp?>> fromField,
Expression<Func<TEnt, TProp?>> toField,
TProp? from, TProp? to,
bool excludeFrom = false,
bool excludeTo = false)
where TEnt : class
where TProp : struct {
// строится предикат с использованием
// PredicateBuilder и MemberExpressionExtensions
return source.Where(...);
}
Полный код на GitHub.
Пример использования.
Зачем?
Для того чтобы:
Минусы тоже есть. Тут уж как кому нравится, какой проект и т.п.
- Переиспользовать код
Например WhereOverlap, учитывающий закрытые/открытые концы, не такой уж тривиальный — можно ошибиться. Можно один раз написать, проверить и в разных местах переиспользовать.
- Повысить читаемость кода
Например WhereInPrevWeek(oo => oo.Date) — запись короче чем полное условие, и по названию сразу понятно что тут происходит.
- Инкапсулировать бизнес логику
Например, WhereInPrevWeek инкапсулирует определение дат начала и конца предыдущей недели. Неделя не обязательно начинается в пн (в Америке в воскресенье).
Или, как в статье, UnderControlPayFilter позволяет глобально, для всего приложения, конфигурировать сумму лимита.
Минусы тоже есть. Тут уж как кому нравится, какой проект и т.п.
Sign up to leave a comment.
Cоздание переиспользуемых Linq фильтров (построителей предикатов для Where), которые можно применять для разных типов