So zählst Duplikate in der Liste mit LINQ
Habe ich eine Liste der Elemente, die
- John-ID
- Matt-ID
- John-ID
- Scott-ID
- Matt-ID
- John-ID
- Lucas ID
Ich will schieben Sie Sie zurück in einer Liste, wie so was auch bedeutet, ich möchte sozusagen durch die höchste Anzahl von Duplikaten.
- John-ID 3
- Matt-ID 2
- Scott-ID 1
- Lucas ID 1
Lassen Sie mich wissen, wie kann ich das machen mit LINQ und C#.
Danke An Alle
EDIT 2 Zeigt-Code:
List<game> inventory = new List<game>();
drinkingforDataContext db = new drinkingforDataContext();
foreach (string item in tbTitle.Text.Split(' '))
{
List<game> getItems = (from dfg in db.drinkingfor_Games
where dfg.game_Name.Contains(tbTitle.Text)
select new game
{
gameName = dfg.game_Name,
gameID = Boomers.Utilities.Guids.Encoder.EncodeURLs(dfg.uid)
}).ToList<game>();
for (int i = 0; i < getItems.Count(); i++)
{
inventory.Add(getItems[i]);
}
}
var items = (from xx in inventory
group xx by xx into g
let count = g.Count()
orderby count descending
select new
{
Count = count,
gameName = g.Key.gameName,
gameID = g.Key.gameID
});
lvRelatedGames.DataSource = items;
lvRelatedGames.DataBind();
Diese query zeigt diese Ergebnisse:
- 1 Hallo Welt mal
- 1 Hallo Welt mal
- 1 Hallo Welt.
- 1 Hallo Welt mal
- 1 Hallo Welt mal
- 1 Hallo Welt mal
- 1 Hallo Welt.
- 1 Hallo Welt mal
Es gibt mir die Anzahl und die Namen, aber es nicht geben Sie mir die ID von dem Spiel....
Angezeigt werden soll:
- 6 hello world mal 234234
- 2 "Hallo Welt". 23432432
Kommentar zu dem Problem
angesichts Ihrer Ergebnisse ist es offensichtlich, dass das Programm behandelt alle Ihre Artikel so deutlich, wie ich sagte, müssen Sie zum implementieren benutzerdefinierter comparer, sonst ist es nicht möglich, wählen Sie verschiedene Werte
InformationsquelleAutor der Frage SpoiledTechie.com | 2009-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mit "group by" + "orderby". Sehen LINQ 101 für details
In Reaktion auf dieser Beitrag (jetzt gelöscht):
Wenn Sie eine Liste der einige benutzerdefinierte Objekte, dann müssen Sie benutzerdefinierte comparer oder eine Gruppe von bestimmten Eigenschaft.
Abfrage auch nicht Ergebnis anzeigen. Zeigen Sie uns die komplette code, um eine bessere Hilfe.
Basierend auf Ihrem neuesten update:
Haben Sie diese code-Zeile:
Seit xx ist ein benutzerdefiniertes Objekt, das system weiß nicht, wie Sie zu vergleichen, ein Element gegen ein anderes aus.
Wie ich bereits schrieb, müssen Sie die guide-compiler und einige Eigenschaft, die verwendet werden, in Objekte, Vergleich oder benutzerdefinierte comparer. Hier ist ein Beispiel:
Hinweis, dass ich Foo.Name als Schlüssel - d.h. die Objekte gruppiert werden, basierend auf dem Wert von Namen Eigenschaft.
Es ist ein catch - Sie behandeln-2-Objekte zu duplizieren, basierend auf Ihren Namen, aber was ist Id ? In meinem Beispiel nehme ich auch nur die Id des ersten Objekts in einer Gruppe. Wenn Sie Ihre Objekte haben unterschiedliche Ids es kann ein problem sein.
InformationsquelleAutor der Antwort aku
Etwas kürzeren version mit Methoden-Kette:
InformationsquelleAutor der Antwort CMS
Den anderen Lösungen
GroupBy
.GroupBy
langsam ist (es hält alle Elemente im Arbeitsspeicher) so schrieb ich meine eigene MethodeCountBy
:InformationsquelleAutor der Antwort Colonel Panic
Können Sie auch tun Wörterbuch:
InformationsquelleAutor der Antwort Willy David Jr
Hier ist das komplette Programm bitte überprüfen Sie diese
InformationsquelleAutor der Antwort Debendra Dash