Pull to refresh

Comments 5

Как то не разглядел в статье — как же именно реализован WhereOverlap.
WhereOverlap это extension для IQueryable

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.

Articles