2010-11-18 20 views
1

linqを使用してデータをグループ化し、クエリの値に基づいてプロパティを更新しようとしています。linqクエリの結果に基づく更新プロパティ

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; } 
    } 

クエリは正常に動作しますが、foreachループのTransactionDetail.ProgressBarは更新されません。

私が間違っていることを見ることができますか?

答えて

0

():

は、この代わりのような式を形成するようにしてください?このLINQ-to-ObjectsまたはLINQ-to-SQLですか?

おそらく、ループしている間にリスト内のオブジェクトのプロパティを変更することはできません。次のように「リスト」に「.ToList()」を追加してみてください。

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

THENは結果をループします。

+0

もちろん.......私はtolistを忘れました:( –

0

一つの可能​​性のあるここでの問題

(230/item.PurchasesRequired) 

item.PurchasesRequiredがintであり、それは230よりも高いかどうので、結果は0になり、式の次の部分であるあなたは、アイテムによって0を掛けたときに.TransactionAmountそれはTransactionAmoutn値に関係なくまだ0です。 PurchasesRequiredが230よりも低い場合でも、230および120のPurchaseRequiredが同じ結果をもたらすため、非常に正確ではありません。まさに取引で何

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

数式のヒントありがとうございました:) –

+0

ただし、lstTransactions.DataSource = list.ToList();にブレークポイントを設定した場合、 foreachループからの変更は一切適用されていません –

関連する問題