Нужно лямбда-выражение OrderBy с преобразованием DateTime
-
06-07-2019 - |
Вопрос
Я пытаюсь создать лямбда-выражение (Linq, C # 3.5), которое может выполнять OrderBy для значения, имеющего тип данных String, но на самом деле содержащее анализируемый DateTime. Р>
Например, типичные значения могут быть «5/12/2009». , " 1/14/2008 " и т. д.
Предложение OrderBy, приведенное ниже, работает правильно для упорядочения (как если бы это были строковые данные), но я на самом деле хочу обработать значения как DateTimes и выполнить сортировку по дате. (Сортировка столбца будет выглядеть примерно так: «dateCreated».)
List<MyObject> orderedList = unorderedList.OrderBy(p => p.Details.Find(s => s.Name == sortColumn).Value).ToList();
Есть ли способ конвертировать значения в предикате, чтобы сделать это? Любая помощь приветствуется!
Решение
Скорее брутто и неэффективно:
List<MyObject> orderedList = unorderedList.OrderBy(p => DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)).ToList();
Чтобы уменьшить количество поисков / разборов:
List<MyObject> orderedList =
(from extracted in (from p in unorderedList
select new { Item = p, Date = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value })
orderby extracted.Date
select extracted.Item)
.ToList();
Другие советы
Спроецируйте значение даты / времени, а затем выполните сортировку по нему.
var orderedList =
(from p in unorderedList
let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)
orderby value
select p)
.ToList();