public async Task <IHttpActionResult> GetLeaderboards( Products products, Modes modes, Runs runs, Characters characters, bool?production = null, bool?coOp = null, bool?customMusic = null, CancellationToken cancellationToken = default) { var query = from l in db.Leaderboards.AsNoTracking() where products.Contains(l.Product.Name) where modes.Contains(l.Mode.Name) where runs.Contains(l.Run.Name) where characters.Contains(l.Character.Name) select l; if (production != null) { query = query.Where(l => l.IsProduction == production); } if (coOp != null) { query = query.Where(l => l.IsCoOp == coOp); } if (customMusic != null) { query = query.Where(l => l.IsCustomMusic == customMusic); } query = from l in query orderby l.Product.ProductId descending, l.Character.Name, l.RunId select l; var total = await query.CountAsync(cancellationToken); var leaderboards = await(from l in query select new LeaderboardDTO { Id = l.LeaderboardId, UpdatedAt = l.LastUpdate, Name = l.Name, DisplayName = l.DisplayName, IsProduction = l.IsProduction, ProductName = l.Product.Name, Product = new ProductDTO { Id = l.Product.ProductId, Name = l.Product.Name, DisplayName = l.Product.DisplayName, }, ModeName = l.Mode.Name, Mode = new ModeDTO { Id = l.Mode.ModeId, Name = l.Mode.Name, DisplayName = l.Mode.DisplayName, }, RunName = l.Run.Name, Run = new RunDTO { Id = l.Run.RunId, Name = l.Run.Name, DisplayName = l.Run.DisplayName, }, CharacterName = l.Character.Name, Character = new CharacterDTO { Id = l.Character.CharacterId, Name = l.Character.Name, DisplayName = l.Character.DisplayName, }, IsCoOp = l.IsCoOp, IsCustomMusic = l.IsCustomMusic, Total = l.Entries.Count, }) .ToListAsync(cancellationToken); var content = new LeaderboardsEnvelope { Total = total, Leaderboards = leaderboards, }; return(Ok(content)); }