Прошу прощения, если это дубликат. Пожалуйста, укажите правильный вопрос.C#: список сортировки по пользовательскому свойству
У меня есть класс с именем MyDate, как показано ниже
public class MyDate
{
private SqlDateTime m_dateTime;
public MyDate(DateTime dateTime)
{
if (DateTime.Compare(dateTime, (DateTime)SqlDateTime.MinValue) <= 0)
m_dateTime = SqlDateTime.MinValue;
else
m_dateTime = dateTime;
}
public string MMDDYYYYHHMMSS
{
get
{
if(m_dateTime > SqlDateTime.MinValue)
return m_dateTime.Value.ToString("MM/dd/yyyy hh:mm:ss tt");
else
return String.Empty;
}
}
}
У меня есть класс, называемый MyEvent, как показано ниже
public class MyEvent
{
public int EventId{get;set;}
public MyDate StartDate{get;set;}
}
У меня есть коллекция MyEvent как
List<MyEvent> myEvents.
Теперь мне нужно сортируйте myEvents в порядке убывания StartDate. У меня проблема: я не могу добавить IComparable или изменить MyDate, так как он написан другой командой, и я просто ссылаюсь на dll. Я не имею контроля над кодом MyDate. Может ли кто-нибудь помочь мне, как я могу это сделать. Я создал новый класс сравнения, который реализует IComparer, но не может понять, как его использовать и сортировать myEvents.
** UPDATE 1 **
Большое спасибо Алексею, Ehsan и Дэйва за помощь мне. Я попробовал ответ Дейва, и это сработало. Я пытался сделать это более эффективно, так что нет необходимости добавлять новые свойства. Я не пытался использовать Ehsan для использования StringDateComparer, но это помогло мне понять, как я могу использовать выражения Comparer в Order linq. Наконец, как отметил Алексеем я, как показано ниже
** UPDATE 2 **
Иногда я получаю пустую строку для e2.StartDate.MMDDYYYYHHMMSS и/или e2.StartDate.MMDDYYYYHHMMSS поэтому я изменил мой код, как ниже
myEvents.Sort(
delegate(MyEvent e1, MyEvent e2)
{
DateTime dt1;
DateTime dt2;
DateTime.TryParse(e1.StartDateTime.MMDDYYYYHHMMSS, out dt1);
DateTime.TryParse(e2.StartDateTime.MMDDYYYYHHMMSS, out dt2);
return dt2.CompareTo(dt1); // descending
//return dt1.CompareTo(dt2); // ascending
}
);
это не точная копия, сценарий OP отличается –
Класс, который принимает 'DateTime' преобразует в' SqlDateTime' и только выставляет на 'строки '? Ваша настоящая проблема - это другая команда. – juharr
Вы, очевидно, видели, что я считаю [дубликат] (http://stackoverflow.com/questions/3309188/how-to-sort-a-listt-by-a-property-in-the-object) вас вопрос, так как он сначала ссылается на поиск заголовка вашего сообщения (https://www.bing.com/search?q=C%23+%3A+Sort+list+on+custom+property). Пожалуйста, уточните, почему предлагаемые там решения не работают (включая пользовательский сопоставитель), поэтому ясно, что этот пост не дублируется. –