/// <summary> /// <paramref name="expr"/>에 해당하는 속성이 상하한 값(lo,hi) 구간 안에 있는 값인지 판단하는 질의를 빌드합니다. /// </summary> /// <typeparam name="T">엔티티 수형</typeparam> /// <param name="expr">속성을 나타내는 람다 식</param> /// <param name="lo">하한 값</param> /// <param name="hi">상한 값</param> /// <returns></returns> public static ICriterion IsBetweenCriterion <T>(this Expression <Func <T, object> > expr, object lo, object hi) { expr.ShouldNotBeNull("expr"); var propertyName = RetrievePropertyName(expr); return(CriteriaTool.IsBetweenCriterion(propertyName, lo, hi)); }
/// <summary> /// <paramref name="value"/> 가 상하한 값 구간 안에 있는 값인지 판단하는 질의를 빌드합니다. /// </summary> /// <typeparam name="T">엔티티 수형</typeparam> /// <param name="value">검사할 값</param> /// <param name="loExpr">하한 값을 나타내는 람다 식</param> /// <param name="hiExpr">상한 값을 나타내는 람다 식</param> /// <returns></returns> public static ICriterion IsInRangeCriterion <T>(this object value, Expression <Func <T, object> > loExpr, Expression <Func <T, object> > hiExpr) { value.ShouldNotBeNull("value"); var loPropertyName = RetrievePropertyName(loExpr); var hiPropertyName = RetrievePropertyName(hiExpr); return(CriteriaTool.IsInRangeCriterion(value, loPropertyName, hiPropertyName)); }
/// <summary> /// 주어진 기간이 오버랩되는지를 파악하는 질의어를 빌드합니다. (모든 구간은 폐쇄구간일 필요는 없고, 개방 구간이라도 상관없습니다. /// </summary> /// <typeparam name="T">엔티티 수형</typeparam> /// <param name="period">검사할 시간 구간</param> /// <param name="loExpr">하한값을 나타내는 속성</param> /// <param name="hiExpr">상한값을 나타내는 속성</param> /// <returns></returns> public static ICriterion IsOverlapCriterion <T>(this ITimePeriod period, Expression <Func <T, object> > loExpr, Expression <Func <T, object> > hiExpr) { period.ShouldNotBeNull("period"); Guard.Assert(period.IsAnytime == false, @"기간이 설정되어 있지 않습니다. 상하한 값 모두 없으므로, 질의어를 만들 필요가 없습니다."); var loPropertyName = RetrievePropertyName(loExpr); var hiPropertyName = RetrievePropertyName(hiExpr); return(CriteriaTool.IsOverlapCriterion(period, loPropertyName, hiPropertyName)); }