Простой однострочный код для проверки на ноль:
namVar == null ? codTdoForNul() : codTdoForFul();
var groupedDemoClasses = (from demoClass in mySepcialVariableWhichIsAListOfDemoClass
group demoClass by demoClass.GroupKey
into groupedDemoClass
select groupedDemoClass).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
Этот будет работать !!!
Просто чтобы сделать предложение mquander конкретным:
var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
.GroupBy(x => x.GroupKey)
.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
Вы бы сделали его короче, если бы вы также использовали более короткие имена переменных, конечно :)
Однако Я предлагаю Поиск может быть более подходящим? Поиск - это, по сути, словарь от ключа до IEnumerable
- если вам действительно не нужны значения в виде списка, это делает код еще короче (и более эффективным) с вызов ToLookup :
var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
.ToLookup(x => x.GroupKey);
Вы уже сделали его однострочным. Просто поместите ToDictionary
в конец первой строки. Если вы хотите, чтобы он был короче, используйте синтаксис функциональной композиции вместо синтаксиса запроса.
Я собираюсь немного здесь не по теме, но я попал в эту ветку, потому что искал способ создать словарь словаря в 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
Надеюсь, это будет полезно для всех, кому нужны такие запросы.