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.
Expression.Call(member.Body, "ToLower", null)
should be replaced with
Expression.IfThenElse(
Expression.Equal(member.Body, Expression.Constant(null)),
Expression.Constant(null),
Expression.Call(member.Body, "ToLower", null))
which translates to
body == null ? null : body.ToLower();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.