2010-11-18 34 views
1

我想用linq來分組一些數據,然後根據查詢中的值更新一個propety。根據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到對象還是LINQ到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(); 

然後通過結果循環。

+0

當然.......我忘了tolist :( – 2010-11-18 18:47:52

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

感謝公式提示:) – 2010-11-18 09:28:42

+0

但是,如果我在lstTransactions.DataSource = list.ToList()上放置斷點,沒有應用foreach循環的變化 – 2010-11-18 09:29:26