在lambda表达式中排序

时间:2012-11-03 09:14:30

标签: c# linq linq-to-objects lambda

我正在尝试在以下情况下对lambda表达式中的数据进行排序。

if (Directory.Exists(Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["ErrorLogPath"].ToString())))
{
    string path = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["ErrorLogPath"].ToString());
    // a.Select(p => Path.GetFileNameWithoutExtension(p));
    var a = Directory.GetFiles(path);
    if (a != null)
    {
        Session["gvData"] = a.ToList();
        BindDataToGrid();
    }
}

var a我获取了

等文件的完整路径列表
c:\\logfiles\\01022012.txt. 

如何根据var排序a 01022012 我试过了

var a = Directory.GetFiles(path).OrderBy(p=>Path.GetFileNameWithoutExtension(p));

但没有工作。我有什么不对的吗?

获得结果

"C:\\LogFiles\\01112012.txt" 
"C:\\LogFiles\\08102012.txt" 
"C:\\LogFiles\\14092012.txt" 
"C:\\LogFiles\\15102012.txt" 
"C:\\LogFiles\\17102012.txt" 
"C:\\LogFiles\\19092012.txt" 

预期

"C:\\LogFiles\\14092012.txt" 
"C:\\LogFiles\\19092012.txt" 
"C:\\LogFiles\\08102012.txt" 
"C:\\LogFiles\\15102012.txt" 
"C:\\LogFiles\\17102012.txt" 
"C:\\LogFiles\\01112012.txt" 

1 个答案:

答案 0 :(得分:2)

var a = Directory.GetFiles(path)
                 .OrderBy(p => Regex.Replace(p,@"^.*\\(\d\d)(\d\d)(\d\d\d\d).*$","$3$2$1"))

订单有效但按字母顺序排列,而您需要按时间顺序排列。 诀窍是将ddMMyyyy变成yyyyMMdd(感谢正则表达式),然后字母和时间顺序变得相同。