Как я создаю вложенную группу - словарем с помощью LINQ?

21
задан Anthony Mastrean 11 April 2013 в 14:57
поделиться

3 ответа

Я думал бы о нем этот путь:

  • Вы, прежде всего, группируетесь кодом, также - что сначала
  • Для каждой группы, Вы все еще получили список результатов - поэтому примените другую группировку там.

Что-то как:

var groupedByCode = source.GroupBy(x => x.Code);

var groupedByCodeAndThenId = groupedByCode.Select(group =>
    new { Key=group.Key, NestedGroup = group.ToLookup
                                         (result => result.MktCode, result => result.Id));

var dictionary = groupedByCodeAndThenId.ToDictionary
    (result => result.Key, result => result.NestedGroup);

, Который даст Вам Dictionary<Code, Lookup<MktCode, Id>> - я думаю , это - то, что Вы хотите. Это полностью не тестируется все же.

26
ответ дан Jon Skeet 29 November 2019 в 06:49
поделиться

Можно создать поиски (Виды Dictionary< List<>>) использование group by into

var lines = new []
{
    new {Code = 1, MktCode = 10, Id = 1},
    new {Code = 2, MktCode = 20, Id = 10},
    new {Code = 1, MktCode = 10, Id = 12},
    new {Code = 1, MktCode = 20, Id = 10},
    new {Code = 1, MktCode = 20, Id = 14},
    new {Code = 2, MktCode = 20, Id = 1},
    new {Code = 2, MktCode = 30, Id = 2},
    new {Code = 1, MktCode = 30, Id = 2},
    new {Code = 1, MktCode = 30, Id = 5},
};

var groups = from line in lines
    group line by line.Code
    into codeGroup
    select new
    {
        Code = codeGroup.Key,
        Items = from l in codeGroup
            group l by l.MktCode into mktCodeGroup
            select new
            {
                MktCode = mktCodeGroup.Key, 
                Ids = from mktLine in mktCodeGroup
                    select mktLine.Id
            }
    };
16
ответ дан Amy B 29 November 2019 в 06:49
поделиться

Вот то, как я сделал бы это:

Dictionary<Code, Dictionary<MktCode, List<Id>>> myStructure =
  myList
    .GroupBy(e => e.Code)
    .ToDictionary(
      g => g.Key,
      g => g
        .GroupBy(e => e.Mktcode)
        .ToDictionary(
          g2 => g2.Key,
          g2 => g2.Select(e => e.Id).ToList()
        )
   )

Вот разбивка процесса:

Группа элементы Кодом, и создают внешний словарь, где ключ является тем кодом.

  myList
    .GroupBy(e => e.Code)
    .ToDictionary(
      g => g.Key,

Для каждого из ключей во внешнем словаре, перегруппируйте элементы Mktcode и создайте внутренний словарь.

      g => g
        .GroupBy(e => e.Mktcode)
        .ToDictionary(
          g2 => g2.Key,

Для каждого из ключей во внутреннем словаре, спроектируйте идентификатор тех элементов и преобразуйте это в список.

          g2 => g2.Select(e => e.Id).ToList()
        )
   )
13
ответ дан Amy B 29 November 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: