2015-08-06 1 views
-4

У меня есть статический список, который я хочу напечатать в конце.Как заказать список и группу по списку

class User 
    { 
      int ID {get;set;} 
      string status {get; set;} 
      DateTime startTime {get;set;} 
      int groupId {get;set;} 
    } 

Я хочу сохранить список пользователей в памяти и распечатать в конце. Теперь список может иметь данные, такие как:

List<User> userList = new List<User>(); 
userList.Add(new User{ ID = 1, ..., groupId = 1 }); 
userList.Add(new User{ ID = 2, ..., groupId = 1 }); 
userList.Add(new User{ ID = 3, ..., groupId = 2 }); 
userList.Add(new User{ ID = 4, ..., groupId = 1 }); 
userList.Add(new User{ ID = 5, ..., groupId = 3 }); 

Я хочу, чтобы сгруппировать эти данные, которые я могу сделать с помощью userList.GroupBy(x => x.groupID), я получаю Enumberable<ID, List<User>>(). Извините, в сгруппированных списках я хочу проверить, не имеет ли какой-либо из пользователей статус == fail, тогда я хочу распечатать всю информацию о пользователях, если status == true, тогда я хочу напечатать только имена пользователя или имена. Для этого я делаю

groupedList.Any(x => x.status == fail) 

Но я хочу, чтобы мой вывод сортируется по STARTTIME, а затем я хочу, чтобы результат быть сгруппированы по Id

var result = userList.GroupBy(x=> x.groupID).OrderByDescending(x => x.startTime).ToList(); 

И потом, я хочу, чтобы мой результат, когда я напечатать как

startTime - 10.00 groupId - 1 ,id - 1, ....status - fail ... more properties 
startTime - 10.00 groupId - 1, id - 2, .... status - pass ... 
startTIme - 10.00 groupId - 1, id - 4, status - pass 
startTiem = 10.00 groupId - 2, id - 3, status - pass (just this info) 
starttime - 9.50 groupId - 3, id - 5, status - fail ... more info 
starttime - 9.50 groupid - 3, id - 6, status - pass ... (still more info. as group has a fail case) 

Если я использую запрос linq выше, он не дает того же выхода. Пожалуйста, предложите, как этого добиться.

ответ

2

Мне кажется, что вы не хотите группировать вообще - ваш список состоит из 5 элементов и вашего вывода. Вы просто хотите заказать несколько свойств. Это должно сработать, а затем:

userList.OrderByDescending(x => x.startTime).ThenBy(x => x.groupId).ToList(); 
+0

Привет, Глорфиндель, я редактировал свой вопрос. Я действительно хочу сгруппировать их, потому что, если у любого пользователя в группе есть статус = сбой, я хочу напечатать дополнительную информацию или иначе (status = pass), я просто напечатаю минимальную информацию. – user3681542

+0

ОК, но все еще неясно, потому что введенный образец ввода не соответствует желаемому выходу. Например. есть только одна запись с ID = 1 на входе, но две из них на выходе. – Glorfindel

+0

Хорошо, так об идентификаторе, мое намерение заключается в том, что внутри группы у любого элемента есть случай сбоя, тогда я хочу показать исключение/причину, по которой он не прошел обработку. Если его пропуск (все пользователи в группе) имеют пропуск , я просто хочу показать, что информация пользователя с статусом прохода ... Итак, я все еще показываю все элементы списка. Мое единственное намерение сгруппировать их по GroupID - это получить статус всех пользователей этой группы. – user3681542

 Смежные вопросы

  • Нет связанных вопросов^_^