我有这个代码:
DbSet<TableName> table = ...// stored reference
var items = from n in table where
n.Name.ToUpper().Contains(searchString.ToUpper().Trim())
select n;
WriteToLog( items.ToString() );
最后一行输出生成的 SQL。这是我得到的:
SELECT
[Extent1].[Name] AS [Name],
// all the other columns follow
FROM (SELECT
[TableName].[Name] AS [Name],
// all the other columns follow
FROM [dbo].[TableName] AS [TableName]) AS [Extent1]
WHERE ( CAST(CHARINDEX(LTRIM(RTRIM(UPPER(@p__linq__0))), UPPER([Extent1].[Name])) AS int)) > 0
你看,有SELECT
-from-SELECT
虽然它完全是多余的 - 一个SELECT
就足够了。尽管表相当小,但使用 EF 的代码运行时间超过半分钟并在该查询上超时。
为什么会生成这个过度设计的 SQL 查询,如何让 EF 生成更好的查询?