LINQ. Группировка по коду в Dictionary
SQL возвращает простой набор данных:
GoodId Quantity CenaZak CenaRoz SkladId
3 1190 369,66 455,00 0001
3 954 341,28 420,00 0002
25 5688 320,72 394,00 0001
25 11895 329,37 391,00 0002
35 143 381,61 469,00 0001
36 303 699,72 861,00 0001
эта модель описана классом:
public class Price
{
public int GoodId { get; set; }
public int Quantity { get; set; }
public decimal CenaZak { get; set; }
public decimal CenaRoz { get; set; }
public string SkladId { get; set; }
}
На входе имеем List<Price>
Как получить объект описывающий вот такую структуру:
{
"3": [
{ "quantity":1190, "cenaZak":369.66, "cenaRoz":455, "SkladId":"0001"},
{ "quantity":954, "cenaZak":341.28, "cenaRoz":420, "SkladId":"0002"}
]
.........
}
где 3 это GoodId
Для удобства создал еще класс с моделью:
public class PriceItem
{
public int Quantity { get; set; }
public decimal CenaZak { get; set; }
public decimal CenaRoz { get; set; }
public string SkladId { get; set; }
}
т.е. на выходе должен быть Dictionary<GoodId, List<PriceItem>>
но вместо имени ключа GoodId должно быть значение
проект Web API на Core 3.1 контроллер :
public async Task<ActionResult<List<KeyValuePair<string, PriceItem[]>>>> PerOrder([FromQuery] string Token)
группирую:
var dat = dt.GroupBy(a => a.GoodId).ToDictionary(p => p.Key, p => p.Select(k => new PriceItem()
{
Quantity = k.Quantity,
CenaZak = k.CenaZak,
CenaRoz = k.CenaRoz,
Supplier = k.Supplier,
StoreId = k.StoreId,
StoreName = k.StoreName,
StoreAddress = k.StoreAddress
}).ToArray());
return dat;
При вызове контроллера получаю ответ:

Получается при преобразовании в Dictionary берется только первая строка и дублируется по кол-ву строк у каждого GoodId, как поправить код чтобы вывести все строки у GoodId
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
var data = new List<Price>();
...
var result = data.GroupBy(x => x.GoodId)
.ToDictionary(x => x.Key,
x => x.Select(z => new PriceItem() { CenaRoz = z.CenaRoz /*.и т д..*/})
.ToArray());
