Question

J'essaie de créer une expression lambda (Linq, C # 3.5) capable d'exécuter une commande OrderBy sur une valeur de type de données String, mais contenant en fait un DateTime analysable.

Par exemple, les valeurs typiques peuvent être "05/12/2009". , "1/14/2008", etc.

La clause OrderBy ci-dessous fonctionne correctement pour la commande (comme s'il s'agissait de données de chaîne), mais je souhaite réellement traiter les valeurs en tant que DateTimes et effectuer le tri par Date. (La sorteColonne serait quelque chose comme "dateCreated".)

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

Existe-t-il un moyen de convertir les valeurs du prédicat pour le faire? Toute aide appréciée!

Était-ce utile?

La solution

Plutôt grossier et inefficace:

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

Pour réduire le nombre de recherches / analyses:

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

Autres conseils

Projetez la valeur date / heure, puis triez-la.

var orderedList =
    (from p in unorderedList
     let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)
     orderby value
     select p)
     .ToList();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top