鉴于针对EF数据背景下,这个LINQ查询产生:SQL通过实体框架的字符串匹配
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)
你知道为什么吗?
而且,更换其中选择到:
c => c.EmailDomain.Substring(0, term.Length) == term
它运行速度快10倍,但仍然会产生一些非常令人讨厌的SQL。
注意: Linq to SQL将StartsWith正确转换为Like {term}%,而nHibernate具有专用的LikeExpression。
你见过恶心的组装或MSIL你好看的LINQ或任何好的C#源代码后,如何得到?问题是如果它给出正确的结果,为什么我们需要打扰。 – 2011-04-12 04:10:02
感谢关于用Substring替换StartsWith的提示 - 解决了与StartsWith版本不匹配空字符串作为前缀的问题。 – 2014-01-28 16:53:20
[linq to entities generated sql]可能的副本(http://stackoverflow.com/questions/576803/linq-to-entities-generated-sql) – brechtvhb 2015-07-24 09:05:56