Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构建一个表达式<;Func<;T、 布尔>&燃气轮机;它使用DbLikeExpression_C#_.net_Entity Framework - Fatal编程技术网

C# 构建一个表达式<;Func<;T、 布尔>&燃气轮机;它使用DbLikeExpression

C# 构建一个表达式<;Func<;T、 布尔>&燃气轮机;它使用DbLikeExpression,c#,.net,entity-framework,C#,.net,Entity Framework,我刚刚注意到存在System.Data.Entity.Core.Common.CommandTrees.DbLikeExpression,它似乎在SqlServer和SQLite提供程序中都得到了很好的实现(通过实现DbExpressionVisitor) 这在处理表达式时是否有用?我是否可以强制表达式使用DbLikeExpression,SqlServer和SQLite提供程序都将其转换为真正的LIKESQL子句。 如果我只是对表达式使用一个简单的lambda--ex:user=>user.N

我刚刚注意到存在
System.Data.Entity.Core.Common.CommandTrees.DbLikeExpression
,它似乎在SqlServer和SQLite提供程序中都得到了很好的实现(通过实现
DbExpressionVisitor

这在处理表达式时是否有用?我是否可以强制表达式使用DbLikeExpression,SqlServer和SQLite提供程序都将其转换为真正的
LIKE
SQL子句。 如果我只是对表达式使用一个简单的lambda--ex:
user=>user.Name.StartsWith(“admin”)
,那么生成的SQL使用
CHARINDEX
,而不是
LIKE
,后者不使用索引,因此速度非常慢

我已经在使用PredicateBuilder(from),特别是用于与其他表达式组合或调用(=扩展)其他表达式,但是结果表达式(与LinqPad一起转储)对我来说完全是一个WTF

[使用最新技术:.NET 4.5.2和EF 6.1.0]


顺便说一句:这整个问题只是为

找到解决方法的结果,我对它们不熟悉,但它们不是继承自
表达式
。看起来,当EF提供程序获得表达式树时,它首先将这些表达式转换为自己的
DbExpression
对象,然后将它们解析为SQL。也就是说,我不知道为什么这些类型是公开可见的,如果它们只是用于这些目的的话。@Servy还有
System.Data.Entity.Core.Query.InternalTrees.LikeOp
,命名空间
System.Data.Entity.Core.Query.plancipiler
正在使用这两种类型。这与我的假设是一致的。@Servy,这是存在的
System.Data.Entity.Core.Objects.elink.ExpressionConverter.TranslateFunctionIntoLike((MethodCallExpression调用,[…])
这显然是对
System.Linq.Expressions.Expression
——我只是想知道为什么
stringVariable.StartWith(“xyz”)
会被翻译成“无用”(不使用索引)
CHARINDEX
如果
一样,则改为查询。您是否有比“这是否在某种程度上可用”更具体的问题?目前,这个问题“太广泛”。