2010-11-18 35 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