2008-11-25 11 views

Antwort

13

tan.ID.ToString() ist eine Zeichenfolge, keine Auflistung, daher können Sie Count() nicht anwenden.

Ich glaube, Sie wollen etwas, wie: (Diese Syntax ist falsch, aber in der Nähe)

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

Update (nach 5 Jahren minus 5 Tagen): (Es ist ein bisschen komisch an Google ein Problem und eine Antwort finden Sie haben geschrieben ..) Im Kern dieses Problems ist die LINQ-Anweisung versucht, eine SQL-Anweisung zu erstellen, und die Datenbank weiß nicht, wie Sie Count() auf eine Zeichenfolge anwenden. Wenn Sie jedoch LINQ für eine Auflistung im Speicher verwenden, würde die Zeichenfolge als IEnumerable behandelt, und Count() würde problemlos funktionieren.

5

James Antwort ist nah an dem, was ich denke, dass Sie wollen, wenn Sie nur wollen, dass der Wert der ID selbst mit seinem gehen. Wenn Sie möchten, dass das Objekt der ID zugewiesen wird, versuchen Sie dies.

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); 

Nicht der sauberste Weg, es in LINQ zu tun, bin ich mir sicher. Wenn ich einen saubereren Weg finde, um es zu tun, werde ich es hier bearbeiten. Das SelectMany ist wichtig, da es die Liste der Objekte aus dem IGrouping flacht.

Verwandte Themen