Создайте словарь по списку с группировкой

Простой однострочный код для проверки на ноль:

namVar == null ? codTdoForNul() : codTdoForFul();
99
задан saluce 3 January 2013 в 17:21
поделиться

4 ответа

var groupedDemoClasses = (from demoClass in mySepcialVariableWhichIsAListOfDemoClass
                          group demoClass by demoClass.GroupKey
                          into groupedDemoClass
                          select groupedDemoClass).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());

Этот будет работать !!!

83
ответ дан 24 November 2019 в 04:58
поделиться

Просто чтобы сделать предложение mquander конкретным:

var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
                             .GroupBy(x => x.GroupKey)
                             .ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());

Вы бы сделали его короче, если бы вы также использовали более короткие имена переменных, конечно :)

Однако Я предлагаю Поиск может быть более подходящим? Поиск - это, по сути, словарь от ключа до IEnumerable - если вам действительно не нужны значения в виде списка, это делает код еще короче (и более эффективным) с вызов ToLookup :

var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
                             .ToLookup(x => x.GroupKey);
188
ответ дан 24 November 2019 в 04:58
поделиться

Вы уже сделали его однострочным. Просто поместите ToDictionary в конец первой строки. Если вы хотите, чтобы он был короче, используйте синтаксис функциональной композиции вместо синтаксиса запроса.

6
ответ дан 24 November 2019 в 04:58
поделиться

Я собираюсь немного здесь не по теме, но я попал в эту ветку, потому что искал способ создать словарь словаря в Linq, и беседа здесь привела меня к ответу ...

Вы можете использовать linq для создания многоуровневых словарей, что полезно в сценариях, где у вас есть более одного ключа или измерения, которые вы хотите искать по. Хитрость заключается в том, чтобы создать группировку, а затем преобразовать ее в словарь, как показано ниже:

  Dim qry = (From acs In ActualSales _
             Group By acs.ProductID Into Group _
             Select ProductID, Months = Group.ToDictionary(Function(c) c.Period) _
            ).ToDictionary(Function(c) c.ProductID)

Получившийся запрос можно использовать следующим образом:

 If qry.ContainsKey(_ProductID) Then
      With qry(_ProductID)
          If .Months.ContainsKey(_Period) Then
             ...
          End If
      End With
 End If

Надеюсь, это будет полезно для всех, кому нужны такие запросы.

3
ответ дан 24 November 2019 в 04:58
поделиться
Другие вопросы по тегам:

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