Skip to content

Instantly share code, notes, and snippets.

@admir-live
Created May 29, 2024 03:47
Show Gist options
  • Save admir-live/98f75deecbd8fa9ca0fe299070ea312e to your computer and use it in GitHub Desktop.
Save admir-live/98f75deecbd8fa9ca0fe299070ea312e to your computer and use it in GitHub Desktop.
EF Core 9 performance with inlined uncorrelated subqueries
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