2010-11-18 2 views
1

Я пытаюсь использовать linq для группировки некоторых данных, а затем обновить propety на основе значений из запроса.свойство update на основе результата запроса 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; } 
    } 

Запрос работает нормально, но когда я делаю цикл Еогеасп 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(); 

ТОГДА цикл по результатам.

+0

Конечно ....... Я забыл список :( –

0

Одна из возможных проблем здесь является следующая часть уравнения

(230/item.PurchasesRequired) 

item.PurchasesRequired является ИНТ, и поэтому, если она выше, чем 230, то результат будет равен 0, и когда вы умножаете 0 ст .TransactionAmount все равно 0 независимо от значения TransactionAmoutn. Даже если PurchasesRequired ниже 230, это сделает его очень нечетким, так как PurchaseRequired из 230 и 120 даст вам тот же результат.

Попробуйте сформировать формулу, как это вместо:

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

Спасибо за формулу tip :) –

+0

Однако, если я положу точку останова на lstTransactions.DataSource = list.ToList(); ни одно из изменений из цикла foreach не было применено –

Смежные вопросы