public class GRNMaster
{
    public string ID { get; set; }
    public string GRNNo { get; set; }
    public List 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; }
}

вышеуказанные классы содержат некоторые свойства класса заголовка GRN и класса деталей. i Grn может состоять из многих элементов, поэтому «List GRNDetails» должен их хранить.

Я беру список GRN из метода, который будет хранить в переменной GrnList

public List GrnList

У меня есть список идентификаторов предметов

public List ItemIDList

В контроллере я хочу зациклить ItemIDList (List ItemIDList) и получить сумму для этого конкретного элемента на основе списка

int ItemQty = 0;

foreach (var item in ItemIDList)
{
   ItemQty = 0;

   var ItemQty =  //some code using GrnList

    // rest of the programming code based on the 
    //  item qty
}

Sameera

Ответов: 2

Ответы (2)

Использование 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 (Кредит принадлежит ReSharper :))

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

Если я правильно понял ваши требования, то это то, что вам нужно:

IEnumerable 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();

2022 WebDevInsider