PredicateExpressionBuilderExtensionMethods.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using System;
  2. using System.Linq.Expressions;
  3. using VCommon.Linq.Expressions.Predicate;
  4. using VCommon.VApplication.Dto;
  5. using VCommon.VEntity;
  6. namespace VCommon.VApplication.Linq.Expressions
  7. {
  8. public static class PredicateExpressionBuilderExtensionMethods
  9. {
  10. public static PredicateWrap<T> DateTimeBetween<T>(this PredicateBuilder<T> me, Expression<Func<T, DateTime?>> selector, DateTimeRange filter)
  11. {
  12. return null == filter ? null
  13. : me.Between(selector, filter.BeginTime, filter.EndTime);
  14. }
  15. public static PredicateWrap<T> FilterByEnable<T>(this PredicateBuilder<T> me, IPassiveFilter filter) where T : IPassive
  16. {
  17. return true != filter?.IsEnable.HasValue ? null
  18. : me.Equal(ExpressionHelper.Property<T, bool>(nameof(IPassive.IsEnable)), filter.IsEnable.Value);
  19. }
  20. public static PredicateWrap<T> SearchByName<T>(this PredicateBuilder<T> me, IStringSearchFilter filter) where T : IHaveName
  21. {
  22. return string.IsNullOrWhiteSpace(filter?.Search) ? null
  23. : me.StringContains(ExpressionHelper.Property<T, string>(nameof(IHaveName.Name)), filter.Search);
  24. }
  25. public static PredicateWrap<T> SearchBy<T>(this PredicateBuilder<T> me, Expression<Func<T, string>> selector, IStringSearchFilter filter)
  26. {
  27. return string.IsNullOrWhiteSpace(filter?.Search) ? null
  28. : me.StringContains(selector, filter.Search);
  29. }
  30. }
  31. }