2

I am trying to use the following code in a linq expression, which I found at this question However it fails if the database field is null.

  public static IQueryable<T> FieldsAreEqualOrBothNullOrEmpty<T>(
        this IQueryable<T> source,
        Expression<Func<T, string>> member,
        string value)
    {
        Expression body;
        if (string.IsNullOrEmpty(value))
        {
            body = Expression.Call(typeof(string), "IsNullOrEmpty", null, member.Body);
        }
        else
        {
            body = Expression.Equal(
                Expression.Call(member.Body, "ToLower", null),
                Expression.Constant(value.ToLower(), typeof(string)));
        }
        return source.Where(Expression.Lambda<Func<T, bool>>(body, member.Parameters));
    }

It looks to me as if the code

 Expression.Call(member.Body, "ToLower", null)

is the problem , but I don't know what to use in it's place.

1 Answer 1

5
Expression.Call(member.Body, "ToLower", null)

should be replaced with

Expression.IfThenElse(
    Expression.Equals(member.Body, Expression.Constant(null)),
    Expression.Constant(null),
    Expression.Call(member.Body, "ToLower", null))

which translates to

body == null ? null : body.ToLower();
Sign up to request clarification or add additional context in comments.

3 Comments

I get Argument type bool is not assignable to parameter type 'system.linq.Expressions.Expression'
Should it be Expression.Equal not Expression.Equals ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.