2012-04-03 12 views
7

Tengo una consultaLINQ distinta y seleccione nueva consulta

var QP = (from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}).Distinct(); 

resultado es:

  • 1 Ivanov Ivan
  • 1 Ivanov Ivan
  • 2 Petrov Petr
  • 3 Sidorov Ivan
  • 3 Sidorov Ivan

y necesito dar como resultado:

  • 1 Ivanov Ivan
  • 2 Petrov Petr
  • 3 Sidorov Ivan
+0

¿Ha intentado aplicar 'Distinct' a su origen de datos, como' from a in QProductAllInfo.Distinct() '? – madd0

+0

sí. No funciona el – alexandrovdi

Respuesta

6

Suponiendo que los diferentes Id. Se consideran siempre distintos, puede intentarlo.

Probablemente lo escriba en dos consultas. De esta forma es fácil de depurar y más legible. Puede usar MoreLinq.

DistinctBy

Download

var temp = from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}.ToList(); 

var result = temp.DistinctBy(i => i.Id); 

También puede utilizar

Var result = temp.GroupBy(x => x.Id).Select(y => y.First()); 
+0

, pero no puedo hacer código como este datagridview.datasource = result; – alexandrovdi

+1

No se puede asignar un Iumerable a un Datasource. Busque en google cómo asignar el Ienumerable a Datasource. No soy bueno en ASP.net – Sandeep

+0

¡Gracias por tu trabajo distintivo! – alexandrovdi

0

Se podría implementar un IEqualityComparer que el uso .Distinct para determinar si el el elemento ya existe en la lista. Puede comparar atributos en lugar de la referencia al mismo objeto.

Pero no sé si funciona en tipos anónimos.

2

Si tiene duplicados en QProductAllInfo, en sustitución de su código por esta debería solucionar su problema.

var QP = from a in QProductAllInfo.Distinct() 
     select new { a.Id, a.Title, a.FullTitle }; 

si esto no funciona, puede utilizar tuplas en lugar de los tipos anónimos como esto:

var QP = from a in QProductAllInfo 
     select Tuple.Create(a.Id, a.Title, a.FullTitle); 

aplicando el operador distinto de los tipos anónimos es inútil porque los tipos anónimos son siempre hacen referencia a tipos que Donc implementar la interfaz IEquatable.

+0

en real necesito seleccionar más de 8 artículos. y al final necesito hacer lo siguiente: datagridview.datasource = QP; – alexandrovdi

Cuestiones relacionadas