#c# #list
#c# #Список
Вопрос:
У меня есть список объектов Employee .Класс Employee может быть таким, как показано ниже:
Class Emplyoyee
{
public string name;
public string DateOFJoining; //Please note here date is in string format
}
Теперь я хочу отобразить список сотрудников с последним сотрудником сверху, поэтому я использую для этого приведенный ниже код :
List<Employee> lst = GetEmployes();
lst = lst.OrderByDescending(x => x.DateOFJoining).ToList();
//Here binding to the repeater
rptEmp.DataSource = lst.Take(2);
rptEmp.DataBind();
Проблема: здесь его упорядочивание, обрабатывающее дату как строку.Но я хочу упорядочить по дате.Кто-нибудь может мне помочь в этом?
Заранее спасибо.
Комментарии:
1. Не является частью какого-либо ответа, но вам следует
Take(2)
перед вамиToList()
, чтобы избежать создания большого списка, который вы затем выбросите; Код был быlst = lst.OrderByDescending(x => x.DateOFJoining).Take(2).ToList()
.2. спасибо, Крис, это был очень полезный совет.
Ответ №1:
Вам нужно было бы преобразовать x.DateOfJoining
в DateTime
в OrderByDescending
выражении. Если вы уверены в качестве ваших дат, вы могли бы попробовать:
lst = lst.OrderByDescending(x => DateTime.Parse(x.DateOfJoining)).ToList();
Ответ №2:
Вы можете Employee
реализовать System.IComparable
интерфейс. а затем просто используйте List.Sort()
метод для упорядочивания сотрудников.
например:
Class Employee : IComparable
{
public string name;
public string DateOFJoining; //Please note here date is in string format
public int CompareTo(object obj) {
if(obj is Employee) {
Employee= (Employee) obj;
return Convert.ToDateTime(DateOfJoining).CompareTo(Convert.ToDateTime(e.DateOfJoining));
}
throw new ArgumentException("object is not an Employee");
}
}
Комментарии:
1. Конечно, вам нужно убедиться, что DateOFJoining содержит правильно отформатированную дату. (в противном случае Convert выдаст исключение)