我的目标很简单:
我需要创建动态查询(使用实体框架和sql),我需要:
- 避免在我的表中使用空行的错误(字符串类型)
- 在查询中使用不区分大小写
我可以使用不区分大小写:
MethodInfo toLowerExpr = typeof(String).GetMethod("ToLower", Type.EmptyTypes);
var singleExpr2 = Expression.Call(propertyReference, toLowerExpr);
我可以用这个来避免空例外:
Expression.Coalesce(propertyReference, Expression.Constant(string.Empty));
我现在的目标是使用不区分大小写的搜索,并避免出现空异常。但是,如果我混合两种选择,我会得到这个:
MethodInfo toLowerExpr = typeof(String).GetMethod("ToLower", Type.EmptyTypes);
var singleExpr2 = Expression.Call(propertyReference, toLowerExpr);
var propReference = Expression.Coalesce(singleExpr2, Expression.Constant(string.Empty));
{(p.Phone.ToLower() ?? "").Contains("678")}
此结果使用不区分大小写,但不能避免空例外:(
有什么想法吗?
答案 0 :(得分:1)
实现您的目标:
(p.Phone ?? "").ToLower()
您需要颠倒合并表达式的顺序。
MethodInfo toLowerExpr = typeof(String).GetMethod("ToLower", Type.EmptyTypes);
// This will give you (p.Phone ?? "")
var coalescedProperty = Expression.Coalesce(propertyReference, Expression.Constant(string.Empty));
// And then call ToLower of the resulting expression
var propReference = Expression.Call(coalescedProperty , toLowerExpr);