В списке объектов транзакции я пытаюсь сгруппироваться BatchNo, затем суммируют Суммы.
public class Extract
{
// Notable fields in TRANSACTION are: String mBatchNo, String mAmount
private List<Transaction> Transactions;
public void testTransactions()
{
// Sum of amounts grouped by batch number
var sGroup = from t in Transactions
group t by t.mBatchNo into g
select new { batchNo = g.Key,
totalAmount = g.Max(a => (Int32.Parse(a.mAmount)))};
}
}
На данном этапе я ступаю в код, просматривают окно местных жителей для наблюдения то, что мой набор результатов состоит в том, чтобы проверить по файлу, который я импортировал к этому объекту.
Последний пакет в файле имеет 3 записи, 100 сумм каждый, который виден, развертывая в объект списка Транзакций. Однако развертка в результат sGroup находит, что тот же пакет имеет 100 общих количеств суммы (Должен быть 300). Что я испортил в этом запросе?
Обратите внимание, что я сохранил это как строку, так как мы - нуль, заполненный слева от 8 символьных полей. По причинам экспорта я решил сохранить как строка. Хотя это может (и вероятно будет), будьте изменены, это не отвечает на мой вопрос: Как заставить этот запрос агрегировать сумму в наборы BatchNo?
Вам нужно вызвать Sum
вместо Max
:
var sGroup = from t in Transactions
group t by t.mBatchNo into g
select new {
batchNo = g.Key,
totalAmount = g.Sum(a => (int.Parse(a.mAmount))) // Sum, not Max
};
Я бы также посоветовал, если ваше поле mAmount
хранится как string
, использовать более надежный метод, чем int.Parse
(так как он вызовет исключение, если строка не является допустимым целым числом, например, если она пустая). Что-то вроде этого:
int ParseOrZero(string text)
{
int value;
if (int.TryParse(text, out value))
return value;
else
return 0;
}
var sGroup = from t in Transactions
group t by t.mBatchNo into g
select new {
batchNo = g.Key,
totalAmount = g.Sum(ParseOrZero) // blanks will be treated as 0
};
Вместо максимума вы должны использовать сумму для вашей группы. Прямо сейчас вы устанавливаете свойство только на максимальное значение в объекте, сумма суммирует все значения в свойстве.