I am doing a common query in my project. I use Expression to build my query tree, the code list below:
public IList<Book> GetBooksFields(string fieldName, string fieldValue)
{
ParameterExpression paramLeft = Expression.Parameter(typeof(string), "m." + fieldName);
ParameterExpression paramRight = Expression.Parameter(typeof(string), "\"" + fieldValue + "\"");
ParameterExpression binaryLeft = Expression.Parameter(typeof(Book),"m");
BinaryExpression binaryExpr = Expression.Equal(paramLeft, paramRight);
var expr = Expression.Lambda<Func<Book, bool>>(binaryExpr, binaryLeft);
return bookRepository.GetMany(expr).ToList();
}
But when I invoke my GetBooksFields
method, it will throw me an exception as below:
I debugged the expr variable and got the correct expression: {m => (m.Name == "sdf")
}, it was what I want, But I don't know why I got the error,thx.
You can't "trick" LINQ into interpreting parameters as member-expressions by throwing in dots into variable names.
You'll have to construct the expression-tree correctly, as below (EDIT: changed field to property as per your comment):