2008-11-25 10 views

Respuesta

13

tan.ID.ToString() es una cadena, no una colección, por lo que no puede aplicar la cuenta().

Creo que usted quiere algo como: (Esta sintaxis está mal, pero cerca)

from tan in TANS 
group tan by tan.ID into dups 
where dups.Count() > 1 
select dups.Key; 

Update (después de 5 años de menos 5 días): (Es un poco raro para Google un problema y encontrar una respuesta USTED escribió ...) En el núcleo de este problema está la declaración de LINQ tratando de construir una declaración de SQL, y la base de datos no sabe cómo aplicar Count() a una cadena. Sin embargo, si usa LINQ contra una colección en la memoria, trataría la cadena como un IEnumerable y el conteo() funcionaría bien.

5

La respuesta de James es cercana a lo que creo que usted está queriendo, si solo quiere que el valor de la identificación vaya con la suya. Si desea que el objeto al que se le haya asignado el ID lo intente.

var dupes = (from tan in TANS 
      group tan by tan.ID.ToString() into duplicates 
      where duplicates.Count() > 1 
      select duplicates.Select(d => d)).SelectMany(d => d); 

No es la manera más limpia de hacerlo en LINQ estoy seguro. Si se me ocurre una forma más limpia de hacerlo, la editaré aquí. Ese SelectMany es importante ya que aplana la lista de objetos de IGrouping.

Cuestiones relacionadas