【问题标题】:How to get Sum from List in another List as a property with linq如何从另一个列表中的列表中获取总和作为 linq 的属性
【发布时间】:2019-05-27 22:14:25
【问题描述】:

我的课程如下。

public class ModelMMaster
{
    public string OrderID { get; set; }
    public bool IsActive { get; set; }
    public List<ModelDetail> _detail { get; set; }
}
public class ModelDetail
{
    public string SKUCode { get; set; }
    public int Quantity { get; set; }
    public double Price { get; set; }
}

我有一个类似的订单列表

List<ModelMMaster> _listMaster = new List<ModelMMaster>

我想用 LINQ 计算 Sum(Quantity * Price),而不是 _listMaster

我被困在这个问题上。

double _sum =_listMaster.Where(f => f.IsActive == true).Select(f => f._detail)......

如何使用 LINQ 从 _listMaster 计算 Sum(Quantity * Price)?

【问题讨论】:

  • 可能是这样的:_listMaster.Where(x =&gt; x.IsActive).SelectMany(x =&gt; x._detail).Sum(x =&gt; x.Quantity * x.Price);?

标签: c# linq


【解决方案1】:

你可以通过几种方式实现它

选项 1

double _sum =_listMaster.Where(f => f.IsActive)
                         .Sum(x=>x._detail.Sum(c=>c.Price * c.Quantity));

选项 2

double _sum =_listMaster.Where(f => f.IsActive)
                        .Aggregate(0d,(result,item)=>result + item._detail.Sum(x=>x.Price * x.Quantity));

选项 3

double _sum =_listMaster.Where(f => f.IsActive)
                        .SelectMany(x=>x._detail)
                        .Sum(x=>x.Price * x.Quantity);

【讨论】:

  • 您可以将Where lamda 简化为f=&gt;f.IsActive。它更短并且不允许像f =&gt; f.IsActive = true这样的拼写错误
  • @AleksAndreev true,已将答案更新为相同。谢谢
【解决方案2】:
        List<ModelMMaster> _listMaster = new List<ModelMMaster>();
        List<ModelDetail> _listDetail = new List<ModelDetail>();

        _listDetail.Add(new ModelDetail { SKUCode = "SKUCode-1", Quantity = 1, Price = 1 });
        _listMaster.Add(new ModelMMaster { OrderID = "OrderID-1", IsActive = true, _detail = _listDetail });

        _listDetail = new List<ModelDetail>();
        _listDetail.Add(new ModelDetail { SKUCode = "SKUCode-2", Quantity = 2, Price = 2 });
        _listDetail.Add(new ModelDetail { SKUCode = "SKUCode-3", Quantity = 3, Price = 3 });
        _listMaster.Add(new ModelMMaster { OrderID = "OrderID-2", IsActive = true, _detail = _listDetail });

        var totalSum = _listMaster.Where(t=>t.IsActive).SelectMany(t => t._detail).Sum(t => t.Quantity * t.Price);

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 2017-02-16
    • 1970-01-01
    • 2011-10-13
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多