C# 类EF运算符用法

C# 类EF运算符用法,c#,.net,entity-framework,sql-like,C#,.net,Entity Framework,Sql Like,我尝试使用DbFunctions。如EF 6.2中的,但出现运行时错误: LINQ to实体无法识别方法“布尔” Like(System.String,System.String)'方法,此方法不能为空 翻译成商店表达式 代码: list=list.Where(p=>DbFunctions.Like(p.Master\u Bill,“somestring%”);列表在哪里 它编译得很好。我认为它可以与EF 6.2一起使用。我知道还有英孚核心,没看它 有什么想法吗? 谢谢怎么样 list = l

我尝试使用
DbFunctions。如EF 6.2中的
,但出现运行时错误:

LINQ to实体无法识别方法“布尔” Like(System.String,System.String)'方法,此方法不能为空 翻译成商店表达式

代码:

list=list.Where(p=>DbFunctions.Like(p.Master\u Bill,“somestring%”);列表在哪里
它编译得很好。我认为它可以与EF 6.2一起使用。我知道还有英孚核心,没看它

有什么想法吗? 谢谢

怎么样

list = list.Where( p => p.Master_Bill.StartsWith(someString));
?

如果用户可以在其搜索字符串中输入通配符,则可以评估字符串的合法组合,即“?somestring”、“somestring?”或“?somestring?”,然后选择适当的where条件

wildcardResult = evaluateWildcard(someString);
switch(wildcardResult.Result)
{
    case WildcardResult.NoWildcard:
        list = list.Where( p => p.Master_Bill == wildcardResult.SearchString);
        break;
    case WildcardResult.StartsWith:
        list = list.Where( p => p.Master_Bill.StartsWith(wildcardResult.SearchString));
        break;
    case WildcardResult.EndsWith:
        list = list.Where( p => p.Master_Bill.EndsWith(wildcardResult.SearchString));
        break;
    case WildcardResult.Contains:
        list = list.Where( p => p.Master_Bill.Contains(wildcardResult.SearchString));
        break;
}
其中,结果类包含检测到的搜索表达式模式的
enum
,以及剥离通配符用作搜索字符串的搜索表达式

在使用通配符时,最好评估搜索字符串的长度,以获得最小可行长度。用户可以通过使用诸如“?”或“e”之类的表达式来触发相当昂贵的查询

编辑:
DbFunctions.Like
也适用于SQL Server。您得到的任何错误都可能是由于您正在运行的
IQueryable
或正在比较的字段的假设造成的。(即不是映射列或特定数据类型?)

例如:像这样的东西很管用

var data = _context.People.Where(p => DbFunctions.Like(p.Name, "s%")).ToList();
它将返回名称以“S”开头的所有人。(不区分大小写)


我要看看你的整个
IQueryable
是什么样子,以及Master\u Bill既是一个映射列又是一个常规的NVARCHAR/VARCHAR列。

你使用的是什么数据库提供程序?DB是SQL Server。请看以下问题(以及该问题与其他相关问题的链接):谢谢。我知道我必须转义一些特殊的字符,比如说,%和u,我相信,但似乎这不是一个问题。它给出了无法转换为SQL的运行时错误。StartsWith是我们试图摆脱的东西。它使用charindexsqlserver函数,而不是像。根据我们的数据库管理员,它不使用索引。我还看了执行计划,但事实并非如此。包含%string%中的结果,我们需要将其锚定在字符串的开头,但我的主要问题是错误。看起来EF 6.2无法翻译DBFunctions。类似于SQL。字符串在len中也有限制。我在互联网上发现很多人提到,使用6.2 EF我应该能够使用DBFunctions.like。但是谁知道呢…是的,DbFunctions.Like也可以。你需要提供一个最小的可复制的例子来确定为什么它不适合你。我已经做了一个测试,就像您在EF 6.2和SQL Server中概述的那样,没有收到任何错误,因此还有一些其他因素在起作用。再次感谢。列映射为varchar列。我认为模仿IQueryable是一个很奇怪的原因。感谢您的建议考虑更新您的示例以显示如何填充
列表。如果它相当复杂,那么根据dbFunctions方法在处理链中的位置,EF可以转换的内容可能会受到限制。
var data = _context.People.Where(p => DbFunctions.Like(p.Name, "s%")).ToList();