Нужно лямбда-выражение OrderBy с преобразованием DateTime

StackOverflow https://stackoverflow.com/questions/1213956

Вопрос

Я пытаюсь создать лямбда-выражение (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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top