目录中的文件按fileName升序排序

时间:2012-08-28 08:07:02

标签: c# .net linq sql-order-by

我有一个目录中的文件列表,我想按文件名对其进行排序。

这是主要代码:

var localPath = this.Server.MapPath("~/Content/Img/" + type + "/");
var directory = new DirectoryInfo(localPath);
isDirectory = directory.Exists;

if (isDirectory)
{
    foreach (FileInfo f in directory.GetFiles())
    {
        Picture picture = new Picture();

        picture.ImagePath = path;
        picture.CreationDate = f.CreationTime;
        picture.FileName = f.Name;
        listPictures.Add(picture);
    }
}

这里是存储所有文件的类图片:

public class Picture
{
    public string ImagePath { get; set; }
    public string FileName { get; set; }
    public DateTime CreationDate { get; set; }
}

如何按FileName的顺序对文件列表进行排序?

5 个答案:

答案 0 :(得分:9)

只需更改你的for循环:

foreach (FileInfo f in directory.GetFiles().OrderBy(fi=>fi.FileName))
{

}

或者,您可以使用以下代码重写整个循环:

var sortedFiles = from fi in directory.GetFiles()
                  order by fi.FileName
                  select new Picture { ImagePath = path, CreationDate = f.CreationTime, FileName = f.FileName };

listPictures.AddRange(sortedFiles);

答案 1 :(得分:2)

listPictures = listPictures.OrderBy(x => x.FileName).ToList();

答案 2 :(得分:2)

您可以使用lambda表达式和/或扩展方法。例如:

listPictures.OrderBy(p => p.FileName).ToList();

答案 3 :(得分:1)

请注意EnumerateFiles执行延迟加载,对于较大的目录可以更有效,所以:

dir.EnumerateFiles().OrderBy(f => f.FileName))

答案 4 :(得分:1)

您可以从头开始使用LINQ:

var files = from f in directory.EnumerateFiles()
    let pic = new Picture(){
        ImagePath = path;
        CreationDate = f.CreationTime;
        FileName = f.Name;
    }
    orderby pic.FileName
    select pic;

请注意,如果仅使用FileNameDirectory.EnumerateFiles(path)会更有效。