linq Expression.Coalesce和不区分大小写在同一个查询中

时间:2014-09-03 17:57:30

标签: linq

我的目标很简单: 我需要创建动态查询(使用实体框架和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")}

此结果使用不区分大小写,但不能避免空例外:(

有什么想法吗?

1 个答案:

答案 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);