Estoy tratando de usar LINQ para crear un Dictionary<string, List<CustomObject>>
de a List<CustomObject>
. Puedo hacer que esto funcione usando "var", pero no quiero usar tipos anónimos. Esto es lo que tengo
var x = (from CustomObject o in ListOfCustomObjects
group o by o.PropertyName into t
select t.ToList());
También intenté usarlo Cast<>()
desde la biblioteca LINQ una vez que lo hice x
, pero tengo problemas de compilación en el sentido de que es un molde inválido.
linq
dictionary
Atari2600
fuente
fuente
var
no es usar un tipo "anónimo", es usar un tipo "implícito". Los tipos anónimos son nuevas clases creadas por el compilador para manejar la construcciónnew { thing = "stuff" };
. Los tipos implícitos son clases existentes,var
es solo una forma conveniente de referenciarlos cuando la variable se asigna de inmediato, el tipo de variable se puede inferir del tipo del objeto que se le asigna. Incluso puede escribir implícitamente una variable que hace referencia a un tipo anónimo, es decir:var a = new { thing = "stuff" };
Respuestas:
fuente
.GroupBy(o => o.PropertyName).ToDictionary(g => g.Key, g => g.ToList())
Esto podría ser parte de la biblioteca de extensión Linq. así que solo tenemos que hacerlo.ToDictionary(o=>o.PropertyName)
ToDictionary
conToLookup
.No puedo comentar sobre @Michael Blackburn, pero supongo que recibió el voto negativo porque GroupBy no es necesario en este caso.
Úselo como:
Además, he visto que esto funciona mucho mejor que cuando se usa GroupBy (). ToDictionary ().
fuente
Para @ atari2600, así es como se vería la respuesta usando ToLookup en la sintaxis lambda:
Básicamente, toma el IGrouping y lo materializa en un diccionario de listas, con los valores de PropertyName como clave.
fuente
ToLookup
tiene una sobrecarga que hará el trabajo.Lo siguiente funcionó para mí.
fuente