Entity Framework 关于性能的主要问题,与开发人员开发查询的方式有关。如果查询编写正确,则无需担心。
确保生成查询的最简单方法是使用 SQL Profiler。您可以在那里简单地跟踪您的查询。进一步学习可以阅读this
在您的情况下,两个生成的查询都是相同的。
我在下面开发了一个示例代码。
假设这些查询
var q1 = _roleRepository.GetAll().Where(q => q.IsDeleted).ToList();
var q2 = _roleRepository.GetAll().Where(q => q.IsDeleted == true).ToList();
SQL 分析器中的结果跟踪是:
exec sp_executesql N'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[NormalizedName] AS [NormalizedName],
[Extent1].[TenantId] AS [TenantId],
[Extent1].[Name] AS [Name],
[Extent1].[DisplayName] AS [DisplayName],
[Extent1].[IsStatic] AS [IsStatic],
[Extent1].[IsDefault] AS [IsDefault],
[Extent1].[IsDeleted] AS [IsDeleted],
[Extent1].[DeleterUserId] AS [DeleterUserId],
[Extent1].[DeletionTime] AS [DeletionTime],
[Extent1].[LastModificationTime] AS [LastModificationTime],
[Extent1].[LastModifierUserId] AS [LastModifierUserId],
[Extent1].[CreationTime] AS [CreationTime],
[Extent1].[CreatorUserId] AS [CreatorUserId]
FROM [dbo].[AbpRoles] AS [Extent1]
WHERE ((([Extent1].[TenantId] IS NULL) AND (@DynamicFilterParam_000003 IS NULL)) OR (([Extent1].[TenantId] IS NOT NULL) AND (([Extent1].[TenantId] = @DynamicFilterParam_000003) OR (([Extent1].[TenantId] IS NULL) AND (@DynamicFilterParam_000003 IS NULL)))) ) AND (([Extent1].[IsDeleted] = @DynamicFilterParam_000001) ) AND ([Extent1].[IsDeleted] = 1)',N'@DynamicFilterParam_000003 int,@DynamicFilterParam_000004 bit,@DynamicFilterParam_000001 bit,@DynamicFilterParam_000002 bit',@DynamicFilterParam_000003=1,@DynamicFilterParam_000004=NULL,@DynamicFilterParam_000001=0,@DynamicFilterParam_000002=NULL
exec sp_executesql N'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[NormalizedName] AS [NormalizedName],
[Extent1].[TenantId] AS [TenantId],
[Extent1].[Name] AS [Name],
[Extent1].[DisplayName] AS [DisplayName],
[Extent1].[IsStatic] AS [IsStatic],
[Extent1].[IsDefault] AS [IsDefault],
[Extent1].[IsDeleted] AS [IsDeleted],
[Extent1].[DeleterUserId] AS [DeleterUserId],
[Extent1].[DeletionTime] AS [DeletionTime],
[Extent1].[LastModificationTime] AS [LastModificationTime],
[Extent1].[LastModifierUserId] AS [LastModifierUserId],
[Extent1].[CreationTime] AS [CreationTime],
[Extent1].[CreatorUserId] AS [CreatorUserId]
FROM [dbo].[AbpRoles] AS [Extent1]
WHERE ((([Extent1].[TenantId] IS NULL) AND (@DynamicFilterParam_000003 IS NULL)) OR (([Extent1].[TenantId] IS NOT NULL) AND (([Extent1].[TenantId] = @DynamicFilterParam_000003) OR (([Extent1].[TenantId] IS NULL) AND (@DynamicFilterParam_000003 IS NULL)))) ) AND (([Extent1].[IsDeleted] = @DynamicFilterParam_000001) ) AND (1 = [Extent1].[IsDeleted])',N'@DynamicFilterParam_000003 int,@DynamicFilterParam_000004 bit,@DynamicFilterParam_000001 bit,@DynamicFilterParam_000002 bit',@DynamicFilterParam_000003=1,@DynamicFilterParam_000004=NULL,@DynamicFilterParam_000001=0,@DynamicFilterParam_000002=NULL
一模一样!