LinqExtension.cs 1.2 KB

12345678910111213141516171819202122232425262728
  1. using System;
  2. using System.Linq.Expressions;
  3. namespace Masuit.Tools.Core.Linq
  4. {
  5. public static class LinqExtension
  6. {
  7. public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> left, Expression<Func<T, bool>> right)
  8. {
  9. var dateExpr = Expression.Parameter(typeof(T));
  10. var parameterReplacer = new ParameterReplacer(dateExpr);
  11. var leftwhere = parameterReplacer.Replace(left.Body);
  12. var rightwhere = parameterReplacer.Replace(right.Body);
  13. var body = Expression.And(leftwhere, rightwhere);
  14. return Expression.Lambda<Func<T, bool>>(body, dateExpr);
  15. }
  16. public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> left, Expression<Func<T, bool>> right)
  17. {
  18. var dateExpr = Expression.Parameter(typeof(T));
  19. var parameterReplacer = new ParameterReplacer(dateExpr);
  20. var leftwhere = parameterReplacer.Replace(left.Body);
  21. var rightwhere = parameterReplacer.Replace(right.Body);
  22. var body = Expression.Or(leftwhere, rightwhere);
  23. return Expression.Lambda<Func<T, bool>>(body, dateExpr);
  24. }
  25. }
  26. }