gpt4 book ai didi

Entity Framework 生成的用于字符串匹配的 SQL

转载 作者:行者123 更新时间:2023-12-04 12:26:07 25 4
gpt4 key购买 nike

鉴于此针对 EF 数据上下文的 linq 查询:

var customers = data.Customers.Where(c => c.EmailDomain.StartsWith(term))

您希望它生成这样的 SQL,对吗?
SELECT {cols} FROM Customers WHERE EmailDomain LIKE @term+’%’

嗯,实际上,它做这样的事情:
SELECT {cols} FROM Customer WHERE ((CAST(CHARINDEX(@term, EmailDomain) AS int)) = 1)

你知道为什么吗?

此外,将 Where 选择器替换为:
c => c.EmailDomain.Substring(0, term.Length) == term

它的运行速度提高了 10 倍,但仍然会产生一些非常令人讨厌的 SQL。

注意: Linq to SQL 正确地将 StartsWith 转换为 Like {term}%,并且 nHibernate 有一个专用的 LikeExpression。

最佳答案

我不知道 MS SQL 服务器,但在 SQL 服务器上,如果您在搜索列上有 INDEX,那么在紧凑型 SQL 服务器上,LIKE 'foo%' 比 CHARINDEX 快数千倍。现在我坐着拉我的头发如何强制它使用 LIKE。

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/1b835b94-7259-4284-a2a6-3d5ebda76e4b

关于 Entity Framework 生成的用于字符串匹配的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/491345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com