2012-11-03 60 views
0

我想在以下情况下,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(); 
    } 
} 

vara我获取文件的完整路径的名单像

c:\\logfiles\\01022012.txt. 

我怎样才能得到vara上排序的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

目前尚不清楚其中LINQ到实体这里适合 - 使用了'Directory.GetFiles()',所以这是一个内存中的数据源,让你在使用LINQ到对象。接下来,请澄清你的意思是“不工作” - 你究竟看到了什么? –

+0

不工作意味着我得到与未应用.OrderBy相同的结果(p => Path.GetFileNameWithoutExtension(p)); 我收到数据但没有排序。 –

+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(由于正则表达式),然后按字母然后按时间和订单变得相同。

+0

谢谢Sithith。有效。我理解正则表达。它按升序排序。我需要做些什么改变才能让它排序下降? –

+1

@SarangAmrutkar使用'.OrderByDescending' –

+0

:)谢谢主席先生。 –