Je voudrais sélectionner uniquement les noms d'utilisateur distincts et ID de la requête. Actuellement, il renvoie des doublons. J'ai essayé de faire Exemple de sortie actuel: P> sortie souhaitée: p> Nom = grp.key.user.first (). Tostring () Code> Mais cela me donne la première lettre du nom d'utilisateur. p> {UserID=1,UserName="N1"}
{UserID=2,UserName="N2"}
3 Réponses :
supposons que votre clé (pour les utilisateurs) est ID et que vous avez ce jeu de données: que, lorsque vous voulez des couples distincts de (userid, nom d'utilisateur), vous aurez le nom d'utilisateur UN1 deux fois, une fois pour ID 1 et une fois pour ID 3. Le seul moyen de faire le tour est d'ignorer l'ID utilisateur. Cela signifie que vous devez modifier le code de cette manière: p> si Ce n'était pas le cas et votre problème est que votre requête renvoie deux fois le couple (1, UN1) à partir du jeu de données suivant: P> public class UserData{
public string UserName {get;set;}
public string UserId {get;set;}
public override bool Equals(object x) {
if (! (x is UserData)) return false;
UserData y = (UserData) x;
return this.UserName == x.UserName && this.UserId == x.UserId;
}
}
TotalUsers = (from p in reports
group p by new UserData
{
UserId = p.UserId,
UserName = p.UserName
} into grp
select new Employee()
{
Name = grp.Key.UserName,
Id = grp.Key.UserId
}).ToList();
Je crée un groupe et sa clé contient $ "{p.userid} - {p.username}" code> et il assurera son unique
Obtenez-le de la clé ou du premier élément, c'est la même chose non?
groupe par clé et obtenir le premier élément de ce groupe.
Désolé, la clé ici est une chaîne, mais pour le code posté dans la question, obtenez le nom d'utilisateur à partir de la touche ou de l'élément IRST, c'est la même chose.
Ceci est vraiment difficile à répondre sans savoir ce que votre Je fais de l'hypothèse que Le rapporte CODE> Les objets ressemblent et ayant un Exemple reproductible minimal . userid code> est un identifiant unique pour l'utilisateur. Et que le nom d'utilisateur code> correspondra toujours avec le userid code>. Si tel est le cas, les utilisateurs distincts devraient vous donner les utilisateurs distincts ... p> groupby code> rassemblera tous les éléments avec le même Userid code>. Ensuite, nous sélectionnons le premier de ces objets - c'est entièrement arbitraire et sans savoir pourquoi vous obtenez des duplicats, cela peut ne pas être la meilleure solution - Cela vaut peut-être la peine d'être examinée pourquoi vous obtenez des duplicats, plutôt que de résoudre le problème ici em>. Ensuite, chacun d'entre eux est converti en un objet code> code>. P> p>
mis à jour le commentaire.
Salut @ hj1990, jetez un coup d'œil à la deuxième partie de ma réponse, c'est exactement ce que vous voulez. Le problème est que les objets dynamiques n'ont aucune définition des égaux, de sorte que le groupe par ne fonctionne pas: sinon est défini, ils sont tous différents.