2010-11-18 7 views
1

Ich versuche Linq zu verwenden, um einige Daten zu gruppieren, dann aktualisieren Sie eine Property basierend auf den Werten aus der Abfrage.Update-Eigenschaft basierend auf dem Ergebnis der linq Abfrage

z.B.

var list = from c in Transactions() 
       group c by c.StoreID into g 
       select new TransactionDetail{ 
        Description = g.FirstOrDefault().Descrip, 
        BusinessName = g.FirstOrDefault().BusinessName, 
        TransactionAmount = g.Where(cr => cr.EntryType == cnCommon.INSERT_ENTRY).Sum(cr=>cr.TransactionAmount).Value, 
       PurchasesRequired = g.FirstOrDefault().PurchasesNeeded 

       }; 

     foreach (TransactionDetail item in list) 
     { 
      item.ProgressBar = (230/item.PurchasesRequired) *Convert.ToInt32(item.TransactionAmount); 
     } 


     lstTransactions.DataSource = list.ToList(); 
     lstTransactions.DataBind(); 


    } 

    public class TransactionDetail 
    { 
     public string Description { get; set; } 
     public string BusinessName { get; set; } 
     public double TransactionAmount { get; set; } 
     public double TransactionsCompleted { get; set; } 
     public int PurchasesRequired { get; set; } 
     public bool IsRedeemable { get; set; } 
     public int Balance { get; set; } 
     public int ProgressBar { get; set; } 
    } 

Die Abfrage funktioniert ok, aber wenn ich die foreach-Schleife TransactionDetail.ProgressBar ist nicht aktualisiert tun.

Können Sie sehen, was ich falsch mache?

Antwort

0

Was genau Transaktionen ist()? Ist das LINQ-to-Objects oder LINQ-to-SQL?

Vielleicht können Sie eine Eigenschaft eines Objekts in der Liste nicht ändern, während es durchläuft. Versuchen Sie ".ToList()" auf "Liste" wie so hinzufügen:

var list = (from c in Transactions() 
      group c by c.StoreID into g 
      select new TransactionDetail{ 
       Description = g.FirstOrDefault().Descrip, 
       BusinessName = g.FirstOrDefault().BusinessName, 
       TransactionAmount = g.Where(cr => cr.EntryType == cnCommon.INSERT_ENTRY).Sum(cr=>cr.TransactionAmount).Value, 
       PurchasesRequired = g.FirstOrDefault().PurchasesNeeded 
       }).ToList(); 

dann die Schleife durch die Ergebnisse.

+0

Natürlich ....... Ich habe den Tolist vergessen :( –

0

Ein mögliches Problem hier ist der folgende Teil der Gleichung

(230/item.PurchasesRequired) 

item.PurchasesRequired ein int ist, und daher, wenn es als 230 höher ist, wird das Ergebnis 0, und wenn Sie 0 für Punkt multiplizieren .TransactionAmount ist immer noch 0, unabhängig vom TransactionAmoutn-Wert. Selbst wenn PurchasesRequired niedriger als 230 ist, wird es sehr ungenau, da ein PurchaseRequired von 230 und 120 Ihnen das gleiche Ergebnis liefert.

Probieren Sie die Formel wie diese stattdessen zu bilden:

(int)((230*item.TransactionAmount)/item.PurchasesRequired) 
+0

Danke für die Formel Tipp :) –

+0

Allerdings, wenn ich einen Haltepunkt auf lstTransactions.DataSource = list.ToList(); keine der Änderungen aus der foreach-Schleife wurden angewendet –

Verwandte Themen