c# linq entity-framework projection keyvaluepair

c# - Proyección en KeyValuePair a través de EF/Linq



entity-framework projection (3)

Como LINQ to Entities no es compatible con KeyValuePair , KeyValuePair debe usar LINQ to Object utilizando AsEnumerable :

return context.myTable .AsEnumerable() .Select(new KeyValuePair<int, string>(o.columnA, o.columnB)) .ToList();

Estoy intentando cargar una lista de KeyValuePairs de una consulta EF / Linq como esta:

return (from o in context.myTable select new KeyValuePair<int, string>(o.columnA, o.columnB)).ToList();

Mi problema es que esto resulta en el error.

"Solo LINQ para Entidades admite constructores e inicializadores sin parámetros".

¿Hay una manera fácil de evitar esto? Sé que podría crear una clase personalizada para esto en lugar de usar KeyValuePair, pero eso parece re-inventar la rueda.


Seleccione solo columnA y columnB de su tabla y mueva el procesamiento adicional en la memoria:

return context.myTable .Select(o => new { o.columnA, o.columnB }) // only two fields .AsEnumerable() // to clients memory .Select(o => new KeyValuePair<int, string>(o.columnA, o.columnB)) .ToList();

Considera también crear un diccionario que contenga KeyValuePairs:

return context.myTable.ToDictionary(o => o.columnA, o => o.columnB).ToList();


También hay una alternativa, cuando desea almacenar múltiples valores para una clave existe algo que se llama Búsqueda .

Representa una colección de claves cada una asignada a uno o más valores.

Aquí tenéis algunas documentations oficiales.

Más sobre la búsqueda parece ser mucho más rápido que el Diccionario <TKey, List <TValue>>.