Besoin d'une expression lambda OrderBy avec la conversion DateTime
-
06-07-2019 - |
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!
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();