私はこのコードを持っています:
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
それで十分でしょう。EFを使用するコードは、30分より長く実行され、テーブルはかなり小さいですが、そのクエリでタイムアウトになります。SELECT
SELECT
この過剰に設計されたSQLクエリが生成されるのはなぜですか。また、EFがより適切なクエリを生成するようにするにはどうすればよいですか。