2012-11-03 62 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

:)謝謝主席先生。 –