【问题标题】:Join two tables and filter to retrieve Name加入两个表并过滤以检索名称
【发布时间】:2021-08-04 15:19:51
【问题描述】:

此代码的性能符合预期。

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 是 Products 表中的一行;那么都需要转到下面的自定义类型“CompanyProducts”。

请问我该如何实现呢?


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

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

Products 表具有 ProductId、ProductsItemName 等属性。

【问题讨论】:

  • 嗨,伙计,你忘了问问题。你到底遇到了什么困难?
  • @MongZhu 谢谢你帮助我。我刚刚编辑了帖子以清楚地显示问题。

标签: c# .net linq lambda


【解决方案1】:

最简单的解决方案是将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();

【讨论】:

  • 非常感谢先生。
猜你喜欢
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2022-10-24
  • 2012-04-03
  • 2018-05-20
  • 2019-09-18
  • 1970-01-01
相关资源
最近更新 更多