Tenho o seguinte objeto em uma lista:
public class DemoClass
{
public int GroupKey { get; set; }
public string DemoString { get; set; }
public object SomeOtherProperty { get; set; }
}
Agora, quero criar o seguinte dicionário a partir dele:
Dictionary<int, List<DemoClass>>
Quero agrupar o List<DemoClass>
pela propriedade GroupKey
, mas não entendo como se faz e alguma ajuda.
Depois de pensar um pouco, consegui o comportamento necessário com:
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());
mas há uma maneira de transformar isso em uma única afirmação?
Você já fez um one-liner. Basta colocar
ToDictionary
no final da primeira linha. Se você quiser que seja mais curto, use a sintaxe de composição funcional em vez da sintaxe de consulta.fonte
Estou saindo um pouco do assunto aqui, mas cheguei a este tópico porque estava procurando uma maneira de criar um dicionário de um dicionário no Linq, e a conversa aqui me levou à resposta ...
Você pode usar o linq para criar dicionários de vários níveis, o que é útil para cenários onde você tem mais de uma chave ou dimensão pela qual deseja pesquisar. O truque é criar um agrupamento e depois convertê-lo em um dicionário, da seguinte maneira:
A consulta resultante pode ser usada da seguinte maneira:
Espero que isso seja útil para qualquer pessoa que precise desse tipo de consulta.
fonte