【问题标题】:C# Grouping of included entities包含实体的 C# 分组
【发布时间】:2021-06-13 17:14:14
【问题描述】:
 public class Offer
{
    public int OfferId { get; set; }
    public string OfferName { get; set; }
    public ICollection<Item> Items { get; set; }
}
public class Item
{
    public int ItemId { get; set; }
    public string PartNo { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }
    public int OfferId { get; set; }
    public Offer Offer { get; set; }
}
public class OfferSum
{
    public int OfferId { get; set; }
    public string OfferName { get; set; }
    public int ItemCount { get; set; }
    public decimal TotalSum { get; set; }
}

我有 3 个类:Offer、Items 和名为 OfferSum 的视图。我想使用 LINQ 来填充 OfferSum 视图。

FindAll() is returning IQueryable<Offer>

ItemCount 应返回报价中包含的项目数量,TotalSum 应返回价格 * 报价中包含的项目数量。但我不知道如何编写查询。

我有这样的事情:

var result = FindAll().
            Include(x=> x.Items).
            GroupBy(x => new { x.OfferId, x.OfferName})
            
            .Select(b => new OfferSum
            {
          OfferName = b.Key.OfferName,
          OfferId = b.Key.OfferId,
          ItemCount = b.Count(dont know),
          TotalSum = b.Sum(dont know)
          

        });

【问题讨论】:

  • ItemCount = b.Key.Items.Count() ?

标签: c# .net entity-framework linq


【解决方案1】:

类似的东西。使用查询语法编写,因为它更易于理解。

var query = 
    from o in FindAll()
    from i in o.Items
    group i by new { o.OfferId, o.OfferName } into g
    select new OfferSum
    {
        OfferName = g.Key.OfferName,
        OfferId = g.Key.OfferId,
        ItemCount = g.Count(),
        TotalSum = g.Sum(x => x.Price * x.Quantity)
    };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多