Я хочу отобразить историю учета клиента в DataGridView
, и мне нужен столбец, в котором отображается промежуточная сумма для его баланса. Старый способ, которым я делал это, заключался в получении данных, циклическом просмотре данных и добавлении строк в DataGridView
по одному и вычислении промежуточного итога в то время. Ламе. Я бы предпочел использовать LINQ to SQL или LINQ, если это невозможно с LINQ to SQL, чтобы выяснить промежуточные итоги, чтобы я мог просто установить DataGridView.DataSource
для своих данных.
Это супер упрощенный пример того, за что я стреляю. Скажем, у меня есть следующий класс.
class Item
{
public DateTime Date { get; set; }
public decimal Amount { get; set; }
public decimal RunningTotal { get; set; }
}
Мне бы хотелось, чтобы оператор L2S или LINQ мог генерировать результаты, которые выглядят следующим образом:
Date Amount RunningTotal
12-01-2009 5 5
12-02-2009 -5 0
12-02-2009 10 10
12-03-2009 5 15
12-04-2009 -15 0
Обратите внимание, что может быть несколько предметов с одинаковой датой (12-02-2009). Результаты должны быть отсортированы по дате до подсчета промежуточных итогов. Я предполагаю, что это означает, что мне понадобятся два оператора: один для получения данных и их сортировки, а второй для вычисления промежуточного итогового значения.
Я надеялся, что Aggregate
справится, но это не сработает, как я надеялся. Или, может быть, я просто не мог понять это.
Этот вопрос , похоже, преследовал то же, что и я, но я не понимаю, как принятый / единственный ответ решает мою проблему.
Есть идеи, как это осуществить?
Редактировать
Комбинируя ответы Алекса и DOK, вот что я закончил:
decimal runningTotal = 0;
var results = FetchDataFromDatabase()
.OrderBy(item => item.Date)
.Select(item => new Item
{
Amount = item.Amount,
Date = item.Date,
RunningTotal = runningTotal += item.Amount
});