Created
May 29, 2024 03:47
-
-
Save admir-live/98f75deecbd8fa9ca0fe299070ea312e to your computer and use it in GitHub Desktop.
EF Core 9 performance with inlined uncorrelated subqueries
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace NewInEfCore9; | |
public static class QueryExamples | |
{ | |
public static Task RunUserQuerySample() | |
{ | |
return ExecuteUserQueryTest<UserManagementDbContext>(); | |
} | |
private static async Task ExecuteUserQueryTest<TContext>() | |
where TContext : UserManagementDbContext, new() | |
{ | |
await using var userDbContext = new TContext(); | |
await InitializeDatabaseAsync(userDbContext); | |
await FetchAndDisplayActiveUsersAsync(userDbContext); | |
} | |
private static async Task InitializeDatabaseAsync<TContext>(TContext userDbContext) | |
where TContext : UserManagementDbContext | |
{ | |
await userDbContext.Database.EnsureDeletedAsync(); | |
await userDbContext.Database.EnsureCreatedAsync(); | |
await userDbContext.SeedDataAsync(); | |
userDbContext.EnableLogging = true; | |
userDbContext.ChangeTracker.Clear(); | |
} | |
private static async Task FetchAndDisplayActiveUsersAsync(UserManagementDbContext userDbContext) | |
{ | |
Console.WriteLine(); | |
Console.WriteLine("Executing Inline Subquery:"); | |
Console.WriteLine(); | |
var activeUsersQuery = userDbContext | |
.Users | |
.Where(user => user.IsActive); | |
var userQueryResults = await userDbContext.Users | |
.Where(user => user.IsActive && user.RegistrationDate > DateTime.Now.AddYears(-1)) | |
.Select(user => new | |
{ | |
UserDetails = user, | |
ActiveUsersCount = userDbContext.Users.Count(u => u.IsActive) | |
}) | |
.Skip(5) | |
.Take(15) | |
.ToArrayAsync(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment