连接两个表和过滤器以检索Name



此代码运行正常。

var soldQtyForEachItem = await _context.InvoiceProduct
.Where(x => x.ProductId != 0)
.GroupBy(x => x.ProductId)
.Select(grp => new CompanyProducts 
{ 
CompanyProductId = grp.Key, 
CompanyProductSoldQuantity = grp.Sum(item => item.QuantitySold)
}).ToListAsync();

问题:

我现在需要加入另一个名为Products的表并根据Id对InvoiceProduct表进行筛选并检索ProductsItemName是product表中的一行;然后所有需要去一个自定义类型"CompanyProducts"下面。

请问我如何实现它?


public class CompanyProducts
{
public int CompanyProductId { get; set; }
public int CompanyProductName { get; set; }
public int CompanyProductSoldQuantity { get; set; }
}

InvoiceProduct表是多对多的,这意味着一个InvoiceId可以有多个productid。

产品表有类似ProductId, ProductsItemName的属性。

最简单的解决方案是将ProductItemName纳入分组:

var soldQtyForEachItem =  await _context.InvoiceProduct
.Where(x => x.ProductId != 0)
.GroupBy(x => new { x.ProductId, x.Product.ProductsItemName } )
.Select(grp => new CompanyProducts 
{ 
CompanyProductId = grp.Key.ProductId, 
CompanyProductName = grp.Key.ProductsItemName,
CompanyProductSoldQuantity = grp.Sum(item => item.QuantitySold)
})
.ToListAsync();

最新更新