Группировать по списку в LINQ - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть список следующего класса:

public class PostOrderDataModel
{
    public string OCN { get; set; }
    public string Quantity { get; set; }
    public string VerticalTypeName { get; set; }
    public Dictionary<string, string> VerticalTypeQuantity { get; set; }
}

, имеющий несколько экземпляров с одинаковым OCN:

List<PostOrderDataModel> lstPostOrderDataModel = new List<PostOrderDataModel>();

lstPostOrderDataModel[0] = new PostOrderDataModel { OCN = "AX", Quantity = "1", VerticalTypeName = "Internet", VerticalTypeQuantity = null} ; 
lstPostOrderDataModel[1] = new PostOrderDataModel { OCN = "AX", Quantity = "2", VerticalTypeName = "Video", VerticalTypeQuantity = null}; 
lstPostOrderDataModel[2] = new PostOrderDataModel { OCN = "BX", Quantity = "2", VerticalTypeName = "Phone", VerticalTypeQuantity = null}; 

Теперь я хочу создать новый список PostOrderDataModel и заполнитьСловарь VerticalTypeQuantity с VerticalTypeName как key и Количество как value, сгруппированные по OCN.Я пробовал это, но таким образом я могу получить только один предмет против Ки.Как я могу получить доступ к обоим элементам (VerticalTypeName, Количество) и добавить их в свой словарь VerticalTypeQuantity?

var results = lstPostOrderDataModel.GroupBy(
    p => p.OCN,
    p => p.VerticalTypeName,
    (key, g) => new { OCN = key, VerticalTypeName = g.ToList() });

Приведенный выше код дает мне VerticalTypeName только для каждого OCN.Я тоже хочу количество, чтобы добавить его в свой словарь.

1 Ответ

0 голосов
/ 03 декабря 2018

Селектор элемента должен быть p => p вместо p => p.VerticalTypeName.После этого вы можете заполнить VerticalTypeQuantity следующим образом:

 var results = lstPostOrderDataModel.GroupBy(
                p => p.OCN,
                p => p,
                (key, g) => new { 
                       OCN = key, 
                      VerticalTypeQuantity = g.ToDictionary(e => e.VerticalTypeName,  
                         e => e.Quantity) 
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...