2017-05-11 1 views
0

Sums J'ai un viewmodelviewmodel avec agrégation conditionnelle()

public class RecTotal 
{ 
    public string PayType { get; set; } 

    public decimal TotalPrice { get; set; } 

    public string Category { get; set; } 
} 

public class ReconcileViewModel 
{ 
    public IEnumerable<RecTotal> RecTotals { get; set; } 

    public IEnumerable<RecInvoiceLineItem> LineItems { get; set; } 
} 

Comment créer des sommes des catégories et de créer un nouveau record rectotal pour chacun. Ex:

ReconcileViewModel VM = new ReconcileViewModel(); 

foreach(POSItemCategory cat in db.POSItemCategories) 
      { 
       recLineItems.Where(p => p.Category == cat.ID).Sum(p => p.InvPrice); 
      } 

Le résultat final je cherche quelque chose comme

VM.RecTotal.Add (Somme (TotalPrice), foreach (Catégorie)

Je sais que je suis proche, mais Je juste ne peux pas obtenir tout à fait.

+0

cat.ID est une chaîne? le nom de la catégorie? – Usman

+0

est ci-dessous la solution de travail pour vous? – Usman

+0

J'ai utilisé ma solution de liste. J'avais un problème avec votre solution proposée et plutôt que de dépanner j'ai juste utilisé ma solution de liste. Merci, cependant, pour le conseil – dave317

Répondre

0

J'ai trouvé une façon de le faire, mais il est « laid » à mon avis et il doit y avoir une meilleure façon de le faire ....

var test = new List<RecTotal>(); 
      foreach (POSItemCategory cat in db.POSItemCategories) 
      { 
       test.Add(new RecTotal 
       { 
        NumberOfItems = recLineItems.Where(p => p.Category == cat.ID).Count(), 
        TotalPrice = recLineItems.Where(p => p.Category == cat.ID).Sum(p => p.InvPrice), 
        PayType = "All", 
        Category = cat.Name, 
        NumberOfInvoices = recLineItems.Where(p => p.Category == cat.ID).Select(p => p.InvID).Distinct().Count() 
       }); 
      }; 
      VM.RecTotals = test; 

S'il vous plaît laissez-moi savoir s'il y a une meilleure façon de le faire.

0

vous pouvez essayer cette

var testdata = new List<RecTotal>(); 

    testdata = recLineItems.Where(x => db.POSItemCategories.Select(a=>a.ID).Contains(x.Category)) 
         .GroupBy(x => x.Category) 
         .Select(
          x => 
           new RecTotal() 
           { 
            Category = x.Key, 
            PayType = "All", 
            TotalPrice = x.Sum(z => z.InvPrice), 
            NumberOfItems = x.Count(), 
            NumberOfInvoices = x.Select(p => p.InvID).Distinct().Count() 
           }).ToList();