using System.Collections.Generic; using System.Data.Entity; using System.Linq; using HPlusSports.Models; namespace HPlusSports { public class HPlusSportsDbContext : DbContext { public DbSet Categories { get; set; } public DbSet Images { get; set; } public DbSet Products { get; set; } public DbSet Reviews { get; set; } public DbSet ShoppingCarts { get; set; } public DbSet ShoppingCartItems { get; set; } public HPlusSportsDbContext() : this("HPlusSports") { } public HPlusSportsDbContext(string connectionName) : base(connectionName) { } public Product FindProductBySku(string sku) => Products.FirstOrDefault(x => x.SKU == sku); public ProductRating GetProductRating(string sku) { var reviews = Reviews.Where(x => x.SKU == sku); return new ProductRating { SKU = sku, Rating = reviews.Average(x => (double?)x.Rating), ReviewCount = reviews.Count(), }; } public IQueryable GetProductRatings(IEnumerable skus) { return Reviews .Where(x => skus.Distinct().Contains(x.SKU)) .GroupBy(x => x.SKU) .Select(reviews => new ProductRating { SKU = reviews.Key, Rating = reviews.Average(x => x.Rating), ReviewCount = reviews.Count(), }); } } }