C# lambda表达式中的orderby
在下面的例子中,我试图对lambda表达式中的数据进行排序C# lambda表达式中的orderby,c#,linq,linq-to-objects,lambda,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["ErrorLogPa
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.
如何根据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"
顺序起作用了,但是按字母顺序排列的,而您需要按时间顺序排列。
诀窍是将ddMMyyyy转换为yyyyymmdd(多亏了正则表达式),然后字母顺序和时间顺序变得相同。不清楚LINQ to实体在这里的位置-您使用的是
Directory.GetFiles()
,所以这是内存中的数据源,所以您使用的是LINQ to对象。接下来,请澄清您所说的“不工作”是什么意思-您到底看到了什么?不工作意味着我得到了与不应用相同的结果。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”很抱歉lazyberezovsky没有将答案标记为已标记。是的,有些答案对我有帮助。我给他们做了标记,谢谢你。成功了。我理解正则表达式。它按升序排序。我需要做哪些更改才能使其按降序排序?@SarangAmrutkar使用.OrderByDescending
var a = Directory.GetFiles(path)
.OrderBy(p => Regex.Replace(p,@"^.*\\(\d\d)(\d\d)(\d\d\d\d).*$","$3$2$1"))