如何在Entity Framework CORE中执行LIKE操作(不是完整的.NET)

16

@Ivan的回答与此相同,但只有21个浏览量,而这个目前有27个。关闭它是一个糟糕的选择。像这样的人离开的原因:https://stackoverflow.com/users/5/jon-galloway - Jeremy Thompson
坦白说,我没有看过这样的统计数据。重复就是重复 :) - Ivan Stoev
请将您的重复内容进行反转,以便更好地索引。区别在于 InStr,而这里使用的是 CHARINDEX,请重新标记 SQL Server。 - Jeremy Thompson
@Ivan,快来看看我的个人资料,我是一个提供优质答案的捐赠者。 - Jeremy Thompson
我同意这个问题的表述更好了。但那个问题该怎么办呢?将其标记为此问题的重复?(我会删除关闭,没问题) - Ivan Stoev
1
无论如何,这就是你要的。干杯。 - Ivan Stoev
3个回答

35

在Core中,LIKE函数已经移动到EF.Functions下:

from c in dc.Organization
where EF.Functions.Like(c.Boss, "%Jeremy%")

3

流畅版本:

dc.Organization.Where(o => EF.Functions.Like(o.Boss, "%Jeremy%"));

1

你可以使用Contains函数代替Like函数。

from c in dc.Organization
where c.Boss.Contains("Jeremy") 

2
不,如果你运行SQL Profiler来捕获原始的SQL查询,你会看到Contains使用了SQL的CHARINDEX函数。EF.Functions.Like在查询中正确地映射到SQL的LIKE - Jeremy Thompson
但是当有大量数据时,使用CHARINDEX比使用类似的方法更快。 - Kaval Patel
这并不相同,例如当启用全文搜索时。 - Jeremy Thompson
4
当搜索条件为空时,CHARINDEX 不返回任何内容,而 LIKE 返回所有内容。 - Jeremy Thompson
耶!那是真的。 - Kaval Patel
包含可以在这个例子中使用,但一般来说与“Like”相比使用要少得多。甚至MS SQL的模式匹配也更多,例如“_________2___”是一个Like表达式,而不是一个Contains表达式。(好吧,在这种简单情况下,可以使用charindex。) 这不是理论问题,在Scala(一个相当古老的ERP系统)中,所有分类维度都合并到一个大字符串中,并且必须通过位置值进行过滤。 - Peter Krassoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接