У меня есть большой набор данных, и я пытаюсь сгруппировать этот набор данных с помощью набора полей. В этом наборе данных у меня есть строки (балансов) в течение 5 последовательных дат. Моя цель - вернуть список настраиваемого объекта, который имеет поле IDictionary с ключом как Date и Balance как значение. Я попробовал что-то вроде:LINQ, чтобы сгруппировать список и вернуть список пользовательских объектов, которые имеют встроенный словарь
int[] DT = new int[] {20160725,20160726,20160727,20160728,20160729};
var tranformedData =
posData
.GroupBy(p => new {p.Symbol, p.Account})
.Select(gp => new TPosModel {
Symbol = gp.Key.Symbol,
Account = gp.Key.Account,
Balances = new Dictionary<int, decimal>{
{
gp.Where(gpi => gpi.BusDate == DT[0]).Select(gpi => gpi.BusDate),
gp.Where(gpi => gpi.BusDate == DT[0]).Select(gpi => gpi.Balance)
},
{
gp.Where(gpi => gpi.BusDate == DT[1]).Select(gpi => gpi.BusDate),
gp.Where(gpi => gpi.BusDate == DT[1]).Select(gpi => gpi.Balance)
},
.
.
.
}
Этот код вызывает ошибку Duplicate Key. Я получил это, чтобы преобразовать словарь в список кортежей, но это не желаемый конечный результат. У кого-нибудь есть предложение о том, как это сделать, пожалуйста.
Благодаря
Можете ли вы показать класс ввода? Также класс 'TPosModel'? –
@YacoubMassad. Вход считывается в виде плоского файла и имеет следующий вид: «Список ({Symbol =« ABC.D », Account =« 1234-0C », BusDate = 20160725, Balance = 123.45}, {Symbol = «ABC.D», Account = «1234-0C», BusDate = 20160726, Balance = 125.67}, {Symbol = "BCD.E", Account = "2345-0D", BusDate = 20160725, Balance = -2300.5}, {Symbol = "BCD.E", Account = "2345-0D", BusDate = 20160726, Balance = -2350.5}) ' Этот список необходимо преобразовать в: ' Список ({Symbol = "ABC.D" , Account = "1234-0C", балансы = {[20160725,123.45], [20160726,125.67]}}, {Symbol = "BCD.E", Account = "2345-0D", балансы = {[20160725, - 2300.5] [20160726, -2350.5]}}) ' – skoppisetti