通过循环列表中的列表获得总和c#

时间:2016-01-01 04:33:28

标签: c# asp.net-mvc

RotAngle = atan2 (y2-y1, x2-x1)

上面的类包含GRN头类和Detail类的一些属性。 i Grn可以包含许多项目,因此“List GRNDetails”可以保留它们。

我从一个存储在变量GrnList

中的方法中获取GRN List
public class GRNMaster
{
    public string ID { get; set; }
    public string GRNNo { get; set; }
    public List<GRNDetails> GRNDetails { get; set; }
}

public class GRNDetails
{
    public string GRNID { get; set; }
    public string ItemID { get; set; }
    public string ItemType { get; set; }
    public int RecevedQty { get; set; }
}

我有一个项目ID列表

public List<GRNMaster> GrnList

在控制器中我想循环ItemIDList(List ItemIDList)并根据List获取该特定项目的总和

public List<string> ItemIDList

2 个答案:

答案 0 :(得分:5)

使用LINQ

var totalQty = 0;
foreach (var item in ItemIDList)
{
    var sumOfCurrentItem = GrnList.SelectMany(s => s.GRNDetails
                           .Where(f => f.ItemID == item)).Select(f => f.RecevedQty).Sum();

    totalQty += sumOfCurrentItem ;
}

甚至可以替换foreach循环( Credit转到ReSharper:)

int totalQty = ItemIDList.Sum(item => GrnList
                  .SelectMany(s => s.GRNDetails.Where(f => f.ItemID == item))
                  .Select(f => f.RecevedQty).Sum());

答案 1 :(得分:0)

如果我已正确理解您的要求,那么这就是您所需要的:

IEnumerable<int> query =
    from grn in GrnList
    from grnDetail in grn.GRNDetails
    join itemID in ItemIDList on grnDetail.ItemID equals itemID
    select grnDetail.RecevedQty;

int ItemQty = query.Sum();