Saltar al contenido

¿Cómo aplico el operador LINQ to SQL Distinct() a una lista??

Tenemos el arreglo a esta incógnita, al menos eso deseamos. Si presentas inquietudes dínoslo, que para nosotros será un gusto ayudarte

Solución:

Esta línea:

var query = _StoreDB.Categories.Select(m => m.Prod_Id).Distinct();

Lo más probable es que su consulta LINQ devuelva IEnumerable… de ints (a juzgar por Select(m => m.Prod_Id)). Tiene una lista de enteros, no una lista de objetos de entidad. Intenta imprimirlos y ver lo que tienes.

Vocación _StoreDB.Categories.Select(m => m.Prod_Id) significa que query contendrá Prod_Id valores solamente, no toda la entidad. Sería más o menos equivalente a este SQL, que selecciona solo una columna (en lugar de toda la fila):

SELECT Prod_Id FROM Categories;

Así que cuando iteras a través de query usando foreach (var item in query)el tipo de item es probable int (o cualquiera que sea tu Prod_Id la columna es), no tu entidad Es por eso que Intellisense no muestra las propiedades de la entidad que espera cuando escribe “item.“…

Si desea todas las columnas en Categories ser incluido en queryni siquiera necesitas usar .Select(m => m). Puedes hacer esto:

var query = _StoreDB.Categories.Distinct();

Tenga en cuenta que si no pasa explícitamente un IEqualityComparer a Distinct(), EqualityComparer.Default se usará (que puede o no comportarse de la manera que usted quiere, dependiendo del tipo de Timplemente o no System.IEquatableetc.).

Para obtener más información sobre cómo obtener Distinct para trabajar en situaciones similares a la suya, eche un vistazo a esta pregunta o esta pregunta y las discusiones relacionadas.

valoraciones y comentarios

Si te ha resultado provechoso este artículo, nos gustaría que lo compartas con más programadores de esta forma nos ayudas a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *