2012-02-10 10 views
5

Estoy tratando de mostrar esas filas en mi DataGrid, que comparten el mismo valor de columna.LINQ: seleccionar filas duplicadas de acuerdo con el valor de columna

Por ejemplo, para las personas, que tienen el mismo apellido, yo probamos este:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => grp.Key); 

Esto funciona, aparentemente, como mi WPF DataGrid contiene filas después de este comando ... Finalmente sólo muestra las filas vacías, como ninguna columna se llena con un valor.

O He intentado esto con personas, que tienen la misma ciudad:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.City).Where(grp => grp.Count() > 1).Select(grp => grp.Key).Select(a => a); 

¿Hay alguna manera apropiada de hacer esto?

+0

No estoy seguro de la pregunta que se hace. Para aclarar, la primera muestra de código funciona, pero la segunda muestra no? – Bryan

+0

Ambos no funcionan, ya que el primero solo devuelve filas vacías (pero devuelve algo, al menos ...), y el segundo no devuelve nada – SeToY

+1

Eso significa que tiene varias filas con valores en blanco para SurName en su base de datos ? Parece que ambos funcionan, pero no devuelven los datos que espera. Sería útil ver las definiciones de clase para "Dirección" y "Persona" – Bryan

Respuesta

9

Usted está seleccionando sólo la clave en su ejemplo:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => **grp.Key**); 

lo que supongo que usted está tratando de hacer es seleccionar la fila entera:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

Para comparar los nombres y apellidos:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new Tuple<String, String>(a.ForeName, a.SurName)).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

EDIT: Para L2E, puede (creo) utilizar los tipos anónimos:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new { a.ForeName, a.SurName }).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

Lo anterior podría ser incorrecto, no 100% seguro.

+0

Gracias, creo que esto funciona ... ¿Cómo debo modificar la consulta para no solo comparar SurNames, sino también ForeNames? .GroupBy (a => a.ForeName, a.SurName) no funciona. – SeToY

+0

¿Quiere decir "mostrar filas que coinciden con el nombre y el apellido"? Ver mi edición –

+0

Sí, las filas donde FirstName y LastName son iguales – SeToY

Cuestiones relacionadas