【发布时间】:2014-05-30 16:33:25
【问题描述】:
我有以下代码:
public Expression FilterString(string property, string Value, ParameterExpression parameter)
{
var getname = Expression.Property(parameter, property);
var toLower = Expression.Call(getname, "ToLower", null, null);
var contains = Expression.Call(toLower, "Contains", null, new[] { Expression.Constant(Value.ToString().ToLower()) });
//This will result in "LOWER(Body) LIKE '%abc123% " but I need "CONTAINS(Body, 'abc123')"
return contains;
}
var parameter = Expression.Parameter(typeof(Message), "message");
var expressionFilter = myclass.FilterString("Body","abc123", parameter);
var lambda = Expression.Lambda(expressionFilter, parameter);
//Apply lambda to EF query object
query = query.Where((Expression<Func<Message, bool>>)lambda);
这会产生一个 TSQL LIKE 语句,但我希望它执行一个 CONTAINS 语句。
无论如何我可以修改上面的FilterString 方法来做到这一点?
【问题讨论】:
-
Contains 不是 SQL99 的一部分——这就是为什么不包括在内。
标签: c# sql .net lambda expression-trees