Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 目录中的文件按文件名升序排序_C#_.net_Linq_Sql Order By - Fatal编程技术网

C# 目录中的文件按文件名升序排序

C# 目录中的文件按文件名升序排序,c#,.net,linq,sql-order-by,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()) {

我有一个目录中的文件列表,我想按文件名排序

这是主要代码:

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; }
}

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

只需更改for循环:

listPictures = listPictures.OrderBy(x => x.FileName).ToList();
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);

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

listPictures.OrderBy(p => p.FileName).ToList();
请注意,执行延迟加载,对于较大的目录更有效,因此:

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

您可以从一开始就使用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;

请注意,如果只使用
文件名
,效率会更高。

为什么要进行否决?这个问题在我看来是合理的me@SteveB当前位置我认为由于这个问题非常简单,可以在谷歌上搜索,甚至可以搜索到它本身,将会有大量的答案!这是一个很好的例子。不确定此问题属于可接受还是不可接受的问题。我可能错了,但由于您正在调用
OrderBy
,我相信Linq必须在返回第一个元素之前处理整个集合。因此,延迟加载不会产生任何影响。请注意,如果只使用
文件名
,效率会更高。@KooKiz:是的,但使用
枚举文件
的优点是,您可以将查询更改为:
dir.EnumerateFiles()。其中(f=>f.CreationTime>=DateTime.Now.AddAyears(-1)).OrderBy(f=>f.FileName)
不记得现在使用
枚举文件
而不是
获取文件
。那么为什么不从一开始就使用它呢?