создать дерево лямбда-выражений, Expression<Func<T, bool>>, динамически выполняющее предикат на основе Or и And

У меня есть строка поиска, которая может быть, и я хочу написать правильныйExpression<Func<T, bool>>который может найти"sub1","sub2","sub3"и вx.Name

С другой стороны, я хочу изменитьx.Name.ToLower().Contains(productParams.Search)для моей цели. Теперь я могу искать термин"sub1 sub2 sub3". Тем не менее, я хочу искать и подстроки.

мои ожидания от поиска:"sub1" || "sub2" || "sub3" || "sub1 sub2 sub3"

      productParams.Search = "sub1 sub2 sub3"

Как это сделать?

      public class ProductsSpecification : BaseSpecifcation<Product>
{
   public ProductsSpecification(ProductSpecParams productParams) : base(x =>
      (string.IsNullOrEmpty(productParams.Search) || 
      x.Name.ToLower().Contains(productParams.Search)) &&
      (!productParams.BrandId.HasValue || x.ProductBrandId == productParams.BrandId))
}

Базовая спецификация:

      public class BaseSpecifcation<T> : ISpecification<T>
{
    public BaseSpecifcation(Expression<Func<T, bool>> criteria)
    {
        Criteria = criteria;
    }

    public Expression<Func<T, bool>> Criteria { get; }
}

0 ответов

Другие вопросы по тегам