У меня есть следующий объект в списке:
public class DemoClass
{
public int GroupKey { get; set; }
public string DemoString { get; set; }
public object SomeOtherProperty { get; set; }
}
Теперь я хочу создать из него следующий словарь:
Dictionary<int, List<DemoClass>>
Я хочу сгруппировать List<DemoClass>
объекты по собственности GroupKey
, но не понимаю, как это делается, и не могу помочь.
Немного подумав, я добился нужного поведения с помощью:
var groupedDemoClasses = from demoClass in mySepcialVariableWhichIsAListOfDemoClass
group demoClass by demoClass.GroupKey
into groupedDemoClass
select groupedDemoClass;
var neededDictionary = groupedDemoClass.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
но есть ли способ сделать это в одном выражении?
Вы уже сделали его однострочным. Просто поставьте
ToDictionary
в конце вашей первой строки. Если вы хотите, чтобы он был короче, используйте синтаксис функциональной композиции вместо синтаксиса запроса.источник
Я немного отклоняюсь от темы здесь, но я попал в эту ветку, потому что искал способ создать словарь словаря в Linq, и разговор здесь привел меня к ответу ...
Вы можете использовать linq для создания многоуровневых словарей, что полезно для сценариев, когда у вас есть более одного ключа или измерения, по которым вы хотите искать. Уловка состоит в том, чтобы создать группу, а затем преобразовать ее в словарь, как показано ниже:
Полученный запрос можно использовать следующим образом:
Надеюсь, это будет полезно для всех, кому нужен такой запрос.
источник