Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要具有日期时间转换的lambda表达式OrderBy_C#_Linq_Predicate_Sql Order By - Fatal编程技术网

C# 需要具有日期时间转换的lambda表达式OrderBy

C# 需要具有日期时间转换的lambda表达式OrderBy,c#,linq,predicate,sql-order-by,C#,Linq,Predicate,Sql Order By,我试图创建一个lambda表达式(Linq,C#3.5),它可以对数据类型为String但实际包含可解析日期时间的值执行OrderBy 例如,典型值可能是“5/12/2009”、“1/14/2008”等 下面的OrderBy子句可以正确地进行排序(就像字符串数据一样),但我实际上希望将这些值视为DateTimes,并按日期执行排序。(sortColumn类似于“dateCreated”。) List orderedList=unorderedList.OrderBy(p=>p.Details.F

我试图创建一个lambda表达式(Linq,C#3.5),它可以对数据类型为String但实际包含可解析日期时间的值执行OrderBy

例如,典型值可能是“5/12/2009”、“1/14/2008”等

下面的OrderBy子句可以正确地进行排序(就像字符串数据一样),但我实际上希望将这些值视为DateTimes,并按日期执行排序。(sortColumn类似于“dateCreated”。)

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

有没有办法转换谓词中的值来实现这一点?感谢您的帮助

相当粗俗和低效:

List<MyObject> orderedList = unorderedList.OrderBy(p => DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)).ToList();
List 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();
List orderedList=
(摘自中的)(摘自无序列表中的p
选择新建{Item=p,Date=DateTime.Parse(p.Details.Find(s=>s.Name==sortColumn.Value})
orderby.Date
选择“已提取。项目”)
.ToList();

投影日期/时间值,然后按其排序

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

第一个版本“粗俗低效”的理由是什么?
var orderedList =
    (from p in unorderedList
     let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)
     orderby value
     select p)
     .ToList();