public static Expression <Func <T, bool> > GetExpression <T>( ParsedSearchString parsedSearchString, string fieldName) { ParameterExpression param = Expression.Parameter(typeof(T)); var member = Expression.Property(param, fieldName); //single expression if (parsedSearchString.SecondPredicate == null) { var expression = ApplyOperator(parsedSearchString.FirstPredicate, member); return(Expression.Lambda <Func <T, bool> >(expression, param)); } //Two expressions if (parsedSearchString.IsAndOperator) { BinaryExpression expression = Expression.AndAlso( ApplyOperator(parsedSearchString.FirstPredicate, member), ApplyOperator(parsedSearchString.SecondPredicate, member)); return(Expression.Lambda <Func <T, bool> >(expression, param)); } else { BinaryExpression expression = Expression.OrElse( ApplyOperator(parsedSearchString.FirstPredicate, member), ApplyOperator(parsedSearchString.SecondPredicate, member)); return(Expression.Lambda <Func <T, bool> >(expression, param)); } }
public IEnumerable <Notebook> SearchNotebooks(string searchString) { ParsedSearchString parsedSearchString = this._predicateParser.Parse(searchString); return(this._context .NotebookList .Where(QueryObject.GetExpression <Notebook>(parsedSearchString, nameof(Notebook.Name)))); }