Linq表达式处理null

时间:2015-10-24 07:16:33

标签: c# linq entity-framework-6

我试图在linq表达式中使用以下代码,我在其中找到了 this question 但是,如果数据库字段为空,则失败。

  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));
    }

它看起来好像是代码

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

是问题,但我不知道在它的地方使用什么。

1 个答案:

答案 0 :(得分:3)

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

应替换为

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

转换为

body == null ? null : body.ToLower();