Сортировка и размещение объектов в списке

class user    
{
    public string userID { get; set; }
    public string groupID { get; set; }
    public int individualCredit { get; set; }
    public int groupCredit { get; set; }
}

у меня такой список

List<user> listUsers = new List<user>();
  1. Я хочу сгруппировать пользователей с одинаковыми groupID.

  2. Рассчитайте groupCredit, добавив individualcredit каждого члена в группе и разделив его на количество членов группы.

  3. Наконец, я хочу назначить каждому пользователю их groupCredit.

Есть группы от трех до пяти человек.

Как это сделать?

Вот что я пробовал.

var groupedUsers = from users in listUsers 
                   where users.groupID != "" 
                   group users by users.groupID into grouphold 
                   select grouphold ;

Вот чего я не знаю.

Как искать ту самую groupID? В том, что я пробовал, я проверяю, что все элементы groupID пусты.


person Sahil    schedule 23.05.2014    source источник
comment
Как это сделать? - С небольшими исследованиями и усилиями! Попробуйте и вернитесь, когда вы застряли с чем-то конкретным. Не спрашивайте, даже не попробовав.   -  person Neil Smith    schedule 23.05.2014
comment
Пахнет домашней работой - приложите немного усилий и возвращайтесь.   -  person Preston Guillot    schedule 23.05.2014
comment
@Sahil Спасибо за публикацию вашей попытки. Похоже, хорошее начало! Однако если идентификатор группы пуст, это означает, что сами данные не годятся. Возможно, посмотрите, где эти элементы заполняются, и поймите, почему это неправильно.   -  person BradleyDotNET    schedule 23.05.2014
comment
@BradleyDotNET Здесь я искал значение groupID, но я хочу сгруппировать соответствующие groupID и получить количество членов группы. Я понятия не имею в этом.   -  person Sahil    schedule 23.05.2014
comment
@Sahil, значит, идентификаторы группы в порядке? Можем помочь со счётчиком :)   -  person BradleyDotNET    schedule 23.05.2014
comment
Ваш существующий запрос делает большую часть того, о чем вы просите (@BradleyDotNET указывает, что ваши исходные данные могут быть загружены неправильно) - он создает группы user экземпляров, которые имеют общий groupID. Если вы хотите увидеть значение ключа группы, вы можете выбрать ключ любого члена группы. Если вы хотите увидеть, сколько элементов находится в какой-либо конкретной группе, вы можете выполнить итерацию группы и подсчитать их, или, что предпочтительнее, вы можете использовать метод LINQ Count, который делает именно это. Я оставлю вам выполнение этих шагов в качестве упражнения, но вы на правильном пути!   -  person Preston Guillot    schedule 23.05.2014
comment
@PrestonGuillot Я хотел бы увидеть любую помощь по коду. потому что я понятия не имею, как отделить каждый идентификатор группы, кроме как назначить его вручную.   -  person Sahil    schedule 23.05.2014


Ответы (1)


Хотя я согласен с комментарием Сахиля, вот отправная точка...

Вы можете использовать LINQ, что-то вроде этого:

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

    public int groupUsersbyID(int _groupID)
    {

       var ListOfUsers = (from g in listUsers where g.groupID == _groupID select g).ToList();
       var count = ListOfUsers.Count();
       var totalCreditforGroup = 0;
       var GroupCredit = 0;

       foreach (var indidCredit in ListOfUsers)
        {
            totalCreditforGroup = totalCreditforGroup + indidCredit.individualCredit;

            GroupCredit = totalCreditforGroup / count;
        }

       return GroupCredit;
    }


    public int returnGroupID(int userId)
    {
        var GroupIDforUser = (from i in listUsers where i.userID == userId select i.groupID).FirstOrDefault();

        return GroupIDforUser;
    }

    public class user
    {
        public int userID { get; set; }
        public int groupID { get; set; }
        public int individualCredit { get; set; }
        public int groupCredit { get; set; }
    }
person Matt D. Webb    schedule 23.05.2014
comment
Мне нужно вставить функциональность в кнопку. Это очень сложный сценарий. Я могу показаться глупым. Но нужно ли размещать эту кодировку в моем файле class.cs? Или главная форма публично, где я объявил свой список? - person Sahil; 23.05.2014
comment
Вы можете вызывать функции в своих событиях кнопок, предполагая, что ваш проект является классическим asp или приложением winforms и т. д. В вашем событии кнопки вы просто вызываете любую функцию: returnGroupID(ID) groupUsersbyID(ID) Вам нужно будет сделать ссылку на cs находится этот код. «listUsers» определяется глобально в пространстве имен cs, поэтому его можно вызывать в любом месте внутри него для повторения. - person Matt D. Webb; 27.05.2014