C# 表达式返回 TSQL 包含关键字

标签 c# sql .net lambda expression-trees

我有以下代码:

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 方法来让它这样做吗?

最佳答案

看起来您不能使用普通 EF,至少根据此处的来源:http://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework/Core/Common/EntitySql/AST/BuiltInKind.cs

您必须将 Contains 添加到 AST 并生成它。 Here's a basic tutorial on DBProviders.

关于C# 表达式返回 TSQL 包含关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959356/

相关文章:

c# - 如何遍历组合框值列表并选择其中一个

c# - ASP.NET 回发 x jQuery : What are the cons and pros?

sql - 关于在 django 中对 sql 查询进行分组...

mysql - 在 ON 值上带有前缀的 SQL 连接

c# - 在转换为 SQL 之前在 C# 中评估的 LINQ 查询?

c# - 将 System.Drawing.Bitmap 转换为 stdole.StdPicture

c# - 初始转换后挂起 TuesPechkin

sql - varchar 是否会因数据碎片而导致性能下降?

.net - IWindsorInstaller和CaSTLe中的AbstractFacility之间的区别

c# - 我如何创建一个 Rx observable 来获取立即值然后采样?