我正在尝试在以下情况下对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"
答案 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(感谢正则表达式),然后字母和时间顺序变得相同。