Estoy tratando de usar .distinct en Linq para obtener resultados basados en un campo de la tabla (por lo que no requieren registros duplicados completos de la tabla).
Sé escribir una consulta básica usando distinto de la siguiente manera:
var query = (from r in table1
orderby r.Text
select r).distinct();
pero necesito resultados donde r.text
no está duplicado.
Respuestas:
Prueba esto:
Esto agrupará la tabla
Text
y usará la primera fila de cada grupo, lo que dará como resultado filas dondeText
es diferente.fuente
table1.GroupBy(x => new { x.Text, x.Property2, x.Property3 }).Select(x => x.First());
GroupBy
no crea grupos vacíos, mira mi comentario anterior. Lo más probable es que su código contenga más de lo que ve aquí. Tal vez usted también tieneWhere
o una condición para elFirst
.MoreLinq tiene un método DistinctBy que puede usar:
Te permitirá hacer:
La implementación del método (sin validación de argumento) es la siguiente:
fuente
GroupBy
necesita uno. Ambos métodos usarán el predeterminadoEqualityComparer
si no se proporciona ninguno.Suena como si quisieras esto:
Esto seleccionará filas donde el
Text
es único.fuente
La respuesta de Daniel Hilgarth anterior lleva a una
System.NotSupported
excepción con Entity-Framework . Con Entity-Framework , tiene que ser:fuente
Hay muchas discusiones sobre este tema.
Puedes encontrar uno de ellos aquí :
Una de las sugerencias más populares ha sido el método Distinct que toma una expresión lambda como parámetro, como ha señalado @Servy.
El arquitecto jefe de C #, Anders Hejlsberg ha sugerido la solución aquí . También explicando por qué el equipo de diseño del marco decidió no agregar una sobrecarga del método Distinct que toma una lambda.
fuente
Por lo que he encontrado, su consulta es en su mayoría correcta. Simplemente cambie "select r" a "select r.Text" es todo y eso debería resolver el problema. Así es como MSDN documentó cómo debería funcionar.
Ex:
fuente
fuente
prueba este código:
fuente
Puedes probar esto:
table1.GroupBy(t => t.Text).Select(shape => shape.r)).Distinct();
fuente