Comment Compter les Doublons dans la Liste avec LINQ
J'ai une liste d'éléments
- John ID
- Matt ID
- John ID
- Scott ID
- Matt ID
- John ID
- Lucas ID
Je veux les pousser en arrière dans une liste comme si ce qui signifie aussi je veux trier par le plus grand nombre de doublons.
- John ID 3
- Matt ID 2
- Scott ID 1
- Lucas ID 1
Laissez-moi savoir comment je peux faire cela avec LINQ et C#.
Merci À Tous
EDIT 2 Montrant 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();
Cette requête affiche ces résultats:
- 1 bonjour tout le monde, fois
- 1 bonjour tout le monde, fois
- 1 Bonjour Tout Le Monde.
- 1 bonjour tout le monde, fois
- 1 bonjour tout le monde, fois
- 1 bonjour tout le monde, fois
- 1 Bonjour Tout Le Monde.
- 1 bonjour tout le monde, fois
Il me donne le nombre et le nom, mais il ne veut pas me donner l'ID du jeu....
Il doit afficher:
- 6 hello world fois 234234
- 2 Bonjour Tout Le Monde. 23432432
- compte tenu de vos résultats, il est évident que le programme traite tous vos articles distincts - comme je l'ai dit, vous avez besoin pour mettre en œuvre personnalisée comparer, sinon il n'est pas possible de sélectionner des valeurs
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le bouton "group by" + "orderby". Voir LINQ 101 pour plus de détails
En réponse à ce post (maintenant supprimé):
Si vous avez une liste de certains des objets personnalisés, alors vous devez utiliser personnalisé comparer ou d'un groupe spécifique de la propriété.
Également de requête ne peut pas afficher le résultat. Montrez-nous code complet pour obtenir une meilleure aide.
Basé sur votre dernière mise à jour:
Vous avez cette ligne de code:
Depuis xx est un objet personnalisé système ne sais pas comment comparer un article contre un autre.
Comme je l'ai déjà écrit, vous avez besoin de guide compilateur et de fournir des biens qui seront utilisés dans les objets de comparaison ou de fournir des comparer. Voici un exemple:
Noter que j'utilise Foo.Nom comme un touche - à-d. les objets seront regroupés en fonction de la valeur de Nom propriété.
Il y a un hic - vous traiter les 2 objets en double en fonction de leurs noms, mais qu'en est Id ? Dans mon exemple, je viens de prendre l'Id de l'objet premier d'un groupe. Si vos objets différents Ids, il peut être un problème.
x.First().ID
choseVersion légèrement plus courte en utilisant des méthodes de la chaîne:
Vous pouvez également faire Dictionnaire:
Les autres solutions que d'utiliser
GroupBy
.GroupBy
est lent (il contient tous les éléments en mémoire) j'ai donc écrit ma propre méthodeCountBy
:Voici le programme complet, veuillez cocher cette