Нужно лямбда-выражение OrderBy с преобразованием DateTime - PullRequest
4 голосов
/ 31 июля 2009

Я пытаюсь создать лямбда-выражение (Linq, C # 3.5), которое может выполнять OrderBy для значения, имеющего тип данных String, но которое фактически содержит анализируемый DateTime.

Например, типичными значениями могут быть «5/12/2009», «14.01.2008» и т. Д.

Предложение OrderBy ниже корректно работает для упорядочения (как будто строковые данные), но на самом деле я хочу обработать значения как DateTimes и выполнить сортировку по дате. (SortColumn будет выглядеть примерно так: dateCreated).

List<MyObject> orderedList = unorderedList.OrderBy(p => p.Details.Find(s => s.Name == sortColumn).Value).ToList();

Есть ли способ конвертировать значения в предикате, чтобы сделать это? Любая помощь приветствуется!

Ответы [ 2 ]

7 голосов
/ 31 июля 2009

Скорее брутто и неэффективно:

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();
1 голос
/ 31 июля 2009

Спроектируйте значение даты / времени, а затем отсортируйте его.

var orderedList =
    (from p in unorderedList
     let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)
     orderby value
     select p)
     .ToList();
...