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;

SQL возвращает набор данных: введите сюда описание изображения

При вызове контроллера получаю ответ: введите сюда описание изображения

Получается при преобразовании в 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());
→ Ссылка