2014-05-23 2 views
0
class user  
{ 
    public string userID { get; set; } 
    public string groupID { get; set; } 
    public int individualCredit { get; set; } 
    public int groupCredit { get; set; } 
} 

J'ai une liste comme cellegroupe une liste d'objets et attribuer des valeurs aux groupes

List<user> listUsers = new List<user>(); 

je dois faire les choses suivantes et je donne ce que je l'ai essayé jusqu'à présent.

Je veux regrouper les utilisateurs avec ceux-ci groupID.

Calculez groupCredit en ajoutant les individualcredit s de chaque membre dans le groupe et en le divisant par le nombre de membres du groupe.

Enfin, je veux attribuer à chaque utilisateur avec leur groupCredit. Il existe des groupes de trois à cinq membres.

Quelqu'un peut-il m'aider dans ce domaine? au moins me donner un exemple de question résolue? J'ai cherché mais je n'ai rien trouvé d'équivalent à ça.

Ceci est mon LINQ jusqu'à présent

var groups = lstUsers.GroupBy(x => x.groupID).Select(g => new {ID=g.Key,count=g.Count() }); 

Ici, la chose que je ne comprends pas le faire est d'obtenir la marque de groupe (Il est calculé en ajoutant tous les membres du groupe des marques et en le divisant par le nombre de membres du groupe) et attribuer une marque de groupe à chaque membre d'un groupe.

Répondre

0

Vous interrogez tous dans une expression LINQ, puis définissez tout dans une boucle.

var credits = lstUsers.GroupBy(x => x.groupID) 
     .Select(g => {ID = g.Key, Credit = g.Sum(x => x.individualCredit)/g.Count()}); 

foreach (var user in lstUsers) 
{ 
    user.groupCredit = credits.Single(x => x.ID == user.groupID).Credit; 
} 
+0

si j'ai variables comme ça dans ma classe public int groupPercentage {get; ensemble; } et Si je veux calculer groupPercentage = (individuaMark/groupMark) * 100; Comment faire cela? C'est assez si vous pouvez montrer comment accéder à la marque individuelle. Merci – Sahil

1
var groups = listUsers.GroupBy(x => x.groupID) 
       .Select(g => new { ID = g.Key, AverageCredit = g.Average(u => u.individualCredit) }); 

foreach (var user in listUsers) 
    user.groupCredit = groups.First(u => u.ID == user.groupID).AverageCredit; 
+0

si j'ai une telle variable dans ma classe public int groupPercentage {get; ensemble; } et Si je veux calculer groupPercentage = (individuaMark/groupMark) * 100; Comment faire cela? c'est assez si vous pouvez montrer comment accéder à la marque individuelle. Merci – Sahil

+0

Vous pouvez ajouter cela à la boucle foreach. Vous pouvez accéder aux propriétés de l'utilisateur ici. Je vois que vous pourriez être assez novice à la programmation. Un conseil: essayez des trucs. Faites comme vous pourriez penser que ça pourrait marcher et essayer. Utilisez un débogueur, parcourez votre code et utilisez watcher pour voir à quoi ressemblent vos variables. Dans cette tâche, il est clair que ce qui est juste et ce qui ne va pas. Vous pourriez vous tromper une ou deux fois, mais vous en tirerez certainement des leçons. – Edin

0

Puisque les classes sont par référence, vous pouvez simplement ajouter que le type anonyme. alors vous ne devez pas relookup par la clé

var listUsers = new List<user>(); 
var groups = listUsers.GroupBy(x => x.groupID).Select(g => new { users = g, groupCredit = g.Average(u => u.individualCredit) }); 
foreach (var group in groups) 
{ 
    foreach (var member in group.users) 
    { 
     // Avg is a decimal have to cast back to int for class 
     member.groupCredit = (int)group.groupCredit; 
    } 
} 
Questions connexes