larry118 Ответов: 1

Новичку в MVVC нужна помощь в подведении итогов внутри a для каждого цикла в моей модели


Мне нужна помощь с простым для каждого цикла суммированием двух полей на треть.

Модель UnrecognizedOIModel содержит следующие поля:
public UnrecognizedOIModel(DataRow row)
    {
      Invoice = row.Field<string>("InvoiceNbr").Trim();
      InvoiceDate = row.Field<DateTime>("InvoiceDate");
      Customer = row.Field<string>("BillName").Trim();
      ProductGroup = row.Field<string>("ProductGroup");
      GroupDescription = row.Field<string>("Descr");
      PromoGroup = row.Field<string>("PlanDescr");
      Cases = row.Field<double>("QtyShip");
      PlanKey = row.Field<string>("AR_PlanKey").Trim();
      Allowance = row.Field<double>("AllowanceAmt");
      Liability = row.Field<double>("Liability");
    }
Мне нужно суммировать дела и ответственность по Промогруппе. Я новичок в словарях, селекторах и т. д.

Моя текущая модель данных выглядит следующим образом:
public class UnrecognizedOIsData
  {
    public UnrecognizedOIsArgs Args { get; set; }   
    public List<UnrecognizedOIModel> UnrecognizedOIs { get; set; }
    public SelectorModel CustSelector { get; set; }
    public SelectorModel PromoSelector { get; set; }
    public Dictionary<string, UnrecognizedOIsSubTotal> GetSubTotals()
    {
      var d = new Dictionary<string, UnrecognizedOIsSubTotal>();
      foreach (var row in UnrecognizedOIs)
      {
        //For each object in row find promogroup in dictionary
        //if not there add promogroup to dictionary
        //Add Cases and Liability to sums
       
       
      }
      return d;
    }
  }
  public class UnrecognizedOIsSubTotal
  {
    public int TotCases { get; set; }
    public double TotLiability { get; set; }
  }
Селекторы используются на странице, где я уже показал таблицу по клиенту. Теперь мне нужно суммировать эти данные по промо-группе.

Помогите, пожалуйста!

Что я уже пробовал:

foreach (var row in UnrecognizedOIs)
      {
        //For each object in row find promogroup in dictionary
        //if not there add promogroup to dictionary
        //Add Cases and Liability to sums
       
        var PromoGroup = row.PromoGroup;

        if (!d.ContainsKey(row.PromoGroup))
        {
          d.Add(PromoGroup, <UnrecognizedOIsSubTotal> row.Cases, row.Liability);
        }
          d[PromoGroup].  new Dictionary<string, UnrecognizedOIsSubTotal>();
      }
      return d;



Спасибо за ответ, но он не сработал.

Я получил ошибки на UnrecognizedOISSubtotal

d.Add(PromoGroup, <UnrecognizedOIsSubTotal> row.Cases, row.Liability);
        }
          d[PromoGroup].  new Dictionary<string, UnrecognizedOIsSubTotal>();


Поэтому я сделал это:

var PromoGroup = row.PromoGroup;

      if (!d.ContainsKey(row.PromoGroup))
      {
        d.Add(PromoGroup, new UnrecognizedOIsSubTotal());
      }
      d[PromoGroup].TotCases = d[PromoGroup].TotCases + row.Cases;
      d[PromoGroup].TotLiability = d[PromoGroup].TotLiability + row.Liability;
    }


Теперь у меня возникли проблемы с отчетом страница cshtml выглядит следующим образом:
      {
        var subTotals = Model.GetSubTotals();
        var promoKey = subTotals.Keys.OrderBy(k => k);
      }

      foreach (var promoKey in subTotals[PromoGroup].Keys.OrderBy(k => k))
        {
          var sub = subTotals[promoKey];
          
            
            
            
          
        }      
    
  <table class="report"><thead><tr><th>Promo Group</th><th>Cases</th><th>Liability</th></tr></thead><tbody><tr><td>sub.promoKey</td><td>sub.Cases</td><td>sub.Liability</td></tr></tbody></table>

No error but when it runs I get a printout of the for each loop on the html page

1 Ответов

Рейтинг:
2

larry118

Это не совсем сработало то что я пытался сделать это:

<table class="report">
   <thead>
     <tr>
       <th>Promo Group</th>
       <th>Cases</th>
       <th>Liability</th>
     </tr>
   </thead>
   <tbody>
     {
       var subTotals = Model.GetSubTotals();
       var promoKey = subTotals.Keys.OrderBy(k => k);
     }

     foreach (var promoKey in subTotals[PromoGroup].Keys.OrderBy(k => k))
       {
         var sub = subTotals[promoKey];
         <tr>
           <td>sub.promoKey</td>
           <td>sub.Cases</td>
           <td>sub.Liability</td>
         </tr>
       }
   </tbody>
 </table>