需要具有DateTime转换的lambda表达式OrderBy [英] Need lambda expression OrderBy with DateTime conversion

查看:197
本文介绍了需要具有DateTime转换的lambda表达式OrderBy的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个lambda表达式(Linq,C#3.5),该表达式可以对数据类型为String但实际上包含可解析的DateTime的值执行OrderBy.

I am trying to create a lambda expression (Linq, C# 3.5) that can perform a OrderBy on a value that is of data type String but which actually contains a parse-able DateTime.

例如,典型值可以是"2009年5月12日","2008年1月14日"等.

For example, typical values may be "5/12/2009" , "1/14/2008", etc.

下面的OrderBy子句可以正确地进行排序(就像字符串数据一样),但是我实际上想将这些值视为DateTimes,并按Date进行排序. (sortColumn类似于"dateCreated".)

The OrderBy clause below works correctly for ordering (as if string data), but I actually want to treat the values as DateTimes, and perform the sort by Date. (The sortColumn would be something like "dateCreated".)

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

是否可以通过转换谓词中的值来做到这一点?任何帮助表示赞赏!

Is there a way to convert the values in the predicate to do this? Any help appreciated!

推荐答案

总的效率低下:

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

要减少查找/解析的次数,请执行以下操作:

To reduce the number of lookups/parsing:

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

这篇关于需要具有DateTime转换的lambda表达式OrderBy的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆