首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF核心整数字段有效地包含子字符串

EF核心整数字段有效地包含子字符串
EN

Stack Overflow用户
提问于 2019-09-04 21:44:35
回答 2查看 1.2K关注 0票数 2

在Server数据库表中,我有一个整数ID列。这不是主密钥,更像是序列号。我没有能力更改表的定义。

我要求用户能够搜索部分ID。例如,"ID包含'801'“。

我可以直接执行以下查询:

代码语言:javascript
复制
select * from items
where item_num like '%801%'

在EF Core中,我有以下几点:

代码语言:javascript
复制
Items.Where(x => x.ItemNumber.ToString().Contains(idPartString))

它被翻译成:

代码语言:javascript
复制
WHERE ((CHARINDEX(@__idPart_2, CONVERT(VARCHAR(11), [x].[item_num])) > 0) OR (@__idPart_2= N''))

是否有更好(更好的性能)方法来实现这一点而不诉诸原始SQL查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-04 22:11:32

我相信你可以使用Items.Where(x => EF.Functions.Like(x.ItemNumber.ToString(), idPartString);

DbFunctions类中,很少有方法可以利用SQL操作符和函数。

更多关于如何根据你的问题在老问题翻译(不是EF核心,但似乎仍然有效)。

更新

SouthShoreAK在评论中添加的有价值的信息。

此外,使用Functions.Like允许您在字符串中间使用通配符,而String.Contains没有使用通配符。

感谢您的分享!

票数 5
EN

Stack Overflow用户

发布于 2019-09-04 22:16:08

虽然第一个表达式更简单,但不太可能更昂贵。两者都需要将所有item_num值转换为varchar来执行比较。第一个简单地有一个隐式转换,而第二个是显式转换。

如果其中任何一个参数不是字符串数据类型,则SQL Server数据库引擎将其转换为字符串数据类型(如果可能的话)。

喜欢

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57795962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档