Pregunta

Estoy tratando de crear una expresión lambda (Linq, C # 3.5) que pueda realizar un OrderBy en un valor que sea de tipo de datos String pero que en realidad contenga un DateTime analizable.

Por ejemplo, los valores típicos pueden ser "12/12/2009" , "14/01/2008", etc.

La siguiente cláusula OrderBy funciona correctamente para ordenar (como si fueran datos de cadena), pero en realidad quiero tratar los valores como DateTimes y realizar la ordenación por Fecha. (La sortColumn sería algo así como '' dateCreated '').

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

¿Hay alguna forma de convertir los valores en el predicado para hacer esto? Cualquier ayuda apreciada!

¿Fue útil?

Solución

Bastante bruto e ineficiente:

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

Para reducir el número de búsquedas / análisis:

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();

Otros consejos

Proyecte el valor de fecha / hora y luego ordene por él.

var orderedList =
    (from p in unorderedList
     let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)
     orderby value
     select p)
     .ToList();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top