Лямбда или LINQ для сортировки списка <Employee>по Shift, C # - PullRequest
2 голосов
/ 01 июня 2011

У меня есть список сотрудников, который мне нужно отфильтровать, и я хотел бы посмотреть, как это сделать с помощью лямбда-выражения и / или выражения LINQ.

Я хочу вернуть ВСЕХ сотрудников в списке, но я хочу, чтобы они возвращались в порядке смены, фамилии и имени.

List<Employee> empList = GetEmployeesInOtherCode();
// ...
int MAX_SHIFT = 5;
List<string> sortedNames = new List<string>(empList.Count);
for (int i = 0; i < MAX_SHIFT; i++) {
  List<string> localShift = new List<string>();
  for (int j = 0; j < empList.Count; j++) {
    Employee e = empList[j];
    if (e.Shift == i) {
      localShift.Add(string.Format("{0}, {1}", e.Lastname, e.Firstname));
    }
  }
  localShift.Sort();
  sortedNames.AddRange(localShift.ToArray());
}
foreach (string line in sortedNames) {
  Console.WriteLine(line);
}

РЕДАКТИРОВАТЬ: Боже, вы, ребята, быстро! Что вы используете для создания этого материала? Вы вручную его кодируете или есть инструмент, который поможет?

Ответы [ 3 ]

7 голосов
/ 01 июня 2011
var sortedNames = empList.Where(e => e.Shift >= 0 && e.Shift < MAX_SHIFT)
                         .OrderBy(e => e.Shift)
                         .ThenBy(e => e.LastName)
                         .ThenBy(e => e.FirstName)
                         .Select(e => string.Format("{0}, {1}", e.Lastname, e.Firstname))
                         .ToList();
3 голосов
/ 01 июня 2011

Для этого мне больше нравится синтаксис выражения запроса:

List<string> sortedNames = (from e in empList
                            orderby e.Shift, e.LastName, e.FirstName
                            select string.Format("{0}, {1}", 
                                                  e.Lastname, 
                                                  e.Firstname)).ToList();
2 голосов
/ 01 июня 2011

OrderBy и ThenBy :

empList.OrderBy(e => e.Shift).ThenBy(e => e.LastName).ThenBy(e => e.FirstName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...