Учитывая, что ваши отношения Product
и FactorItem
имеют One-to-Zero-or-One
следующим образом:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public FactorItem FactorItem { get; set; }
}
public class FactorItem
{
[Key, ForeignKey("Product")]
public int ProductId { get; set; }
public int Qty { get; set; }
public bool IsBuy { get; set; }
public Product Product { get; set; }
}
Тогда ваш запрос для получения 3 самых продаваемых продуктов должен выглядеть следующим образом:
List<Product> products = dbContext.Products.OrderByDescending(p => p.FactorItem.Qty).Take(3).ToList();
Учитывая, что ваши Product
и FactorItem
имеют отношение One-to-Many
следующим образом:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<FactorItem> FactorItems { get; set; }
}
public class FactorItem
{
public int Id { get; set; }
[ForeignKey("Product")]
public int ProductId { get; set; }
public int Qty { get; set; }
public bool IsBuy { get; set; }
public Product Product { get; set; }
}
Тогда ваш запрос для получения 3-х продаваемых продуктов должен выглядеть следующим образом:
var productList = dbContext.FactorItems.GroupBy(fi => new { fi.ProductId, fi.Product.Name }).Select(g => new
{
ProductId = g.Key.ProductId,
ProductName = g.Key.Name,
TotalSoldQty = g.Sum(x => x.Qty)
}).OrderByDescending(x => x.TotalSoldQty).ToList();