LINQ to DataSet, distinto por varias columnas
-
22-08-2019 - |
Pregunta
Sólo quería comprobar si hay manera de hacerlo distinto por varias columnas. Gracias de antemano !!!
Por cierto, he encontrado una gran extensión de LINQ aquí pero necesitan alguna orientación a utilizarlo para múltiples columnas
Solución
Bueno, se puede hacer la proyección en primer lugar:
var qry = db.Customers.Select(cust => new {cust.ID, cust.Name, cust.Region})
.Distinct();
O en la sintaxis de consulta:
var qry = (from cust in db.Customers
select new {cust.ID, cust.Name, cust.Region}).Distinct();
Que hacer?
Otros consejos
En lugar de Distinto puede utilizar GroupBy y luego seleccionar el registro Top mayoría de cada grupo
Cómo LINQ Distinto de múltiples campos sin anónima tipos
retorno de o en objEntity
group o by new { o.Field1, o.Field2, o.Field3, o.Field4, o.Field5 } into grp select grp.FirstOrDefault();
Esto le dará la EntityObject En lugar de la AnonymousType
Por "distinta por varias columnas" lo que realmente quieren decir es un grupo de.
Cuando pide distinto, significa que vas a encontrar todas las filas distintas, o, un grupo mediante el uso de todas las columnas de la tabla.
Si desea sólo para obtener agrupaciones distintas para un subconjunto de las columnas, a continuación, utilizar un grupo de en su cláusula, especificando las columnas para agrupar. A continuación, seleccione los grupos, ya que sólo desea un juego de llaves para cada grupo.
Otra opción fácil es crear una única cadena distinta.
var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3);
query var = (de quiste en db.Customers seleccionar nueva {cust.ID, cust.Name, cust.Region}). GroupBy (x => new {x.Name, x.Region}). Seleccionar (z => z.OrderBy (i => i.cust) .FirstOrDefault ()) ToList ();.