using System; using System.Linq.Expressions; using VCommon.Linq.Expressions.Predicate; using VCommon.VApplication.Dto; using VCommon.VEntity; namespace VCommon.VApplication.Linq.Expressions { public static class PredicateExpressionBuilderExtensionMethods { public static PredicateWrap DateTimeBetween(this PredicateBuilder me, Expression> selector, DateTimeRange filter) { return null == filter ? null : me.Between(selector, filter.BeginTime, filter.EndTime); } public static PredicateWrap FilterByEnable(this PredicateBuilder me, IPassiveFilter filter) where T : IPassive { return true != filter?.IsEnable.HasValue ? null : me.Equal(ExpressionHelper.Property(nameof(IPassive.IsEnable)), filter.IsEnable.Value); } public static PredicateWrap SearchByName(this PredicateBuilder me, IStringSearchFilter filter) where T : IHaveName { return string.IsNullOrWhiteSpace(filter?.Search) ? null : me.StringContains(ExpressionHelper.Property(nameof(IHaveName.Name)), filter.Search); } public static PredicateWrap SearchBy(this PredicateBuilder me, Expression> selector, IStringSearchFilter filter) { return string.IsNullOrWhiteSpace(filter?.Search) ? null : me.StringContains(selector, filter.Search); } } }