C# 如何返回具有最早日期时间的顶级FileInfo对象?

C# 如何返回具有最早日期时间的顶级FileInfo对象?,c#,linq,C#,Linq,我需要能够查询我添加到它的文件的本地目录。包含LINQ查询的方法将返回创建日期最早的文件。因此,操作顺序基本上是先进先出的方案 请注意,我正在返回一个列表,因为需求可能会更改为返回多个文件 我为实现其中大部分功能而编写的代码如下: public static List<FileInfo> GetNextFileToProcess(DirectoryInfo directory) { var files = from f in directory.GetFiles()

我需要能够查询我添加到它的文件的本地目录。包含LINQ查询的方法将返回创建日期最早的文件。因此,操作顺序基本上是先进先出的方案

请注意,我正在返回一个列表,因为需求可能会更改为返回多个文件

我为实现其中大部分功能而编写的代码如下:

public static List<FileInfo> GetNextFileToProcess(DirectoryInfo directory)
{
    var files = from f in directory.GetFiles()
                orderby f.CreationTime ascending
                select f;

    return files.Cast<FileInfo>().ToList();
}
问题在于,我没有将此列表限制为在确定排序顺序后仅包含和返回索引为0的文件


我需要where子句来限制返回最旧的文件还是什么?

您说过要返回一个列表,以防以后需要多个文件,那么为什么还要麻烦限制它呢?您可以使用Take1,但为什么不将所有内容返回给打电话的人,让他们决定他们想要什么呢

var files = (from f in directory.EnumerateFiles()
             orderby f.CreationTime ascending
             select f).Take(1);

如果您要将其限制为包含一个元素的列表,您不妨将其改为只返回一个FileInfo-如果您仍要返回多个条目,则需要修改代码。

您说过要返回一个列表,以防以后需要多个文件-那么为什么还要麻烦限制它呢?您可以使用Take1,但为什么不将所有内容返回给打电话的人,让他们决定他们想要什么呢



如果您要将其限制为包含一个元素的列表,您不妨将其改为只返回一个FileInfo-如果您仍要返回多个条目,则需要修改代码。

@JonSkeet,因为我返回的对象是列表,而IEnumerable不是列表,因此需要强制转换为一才能返回它。这就是为什么您需要打电话给托利斯特,但演员们仍然只是返回了IEnumerable。@JonSkeet啊!非常感谢。我没有像以前那样更改代码,而是返回一个自定义对象。该死你看,射击代码总是会咬你的屁股。@JonSkeet,因为我返回的对象是列表,而IEnumerable不是列表,所以需要强制转换为1才能返回它。这就是为什么你调用ToList,但强制转换仍然只返回IEnumerable。@JonSkeet啊!非常感谢。我没有像以前那样更改代码,而是返回一个自定义对象。该死你看,散弹射击代码总是会咬你的屁股。我不知道你能把整个Linq语句像那样和帕伦斯组合在一起。你会想要这个文件的case@BrokenGlass:为什么?无论如何,在检索所有文件之前都不会有结果。否则,您将需要两倍的内存,一次用于GetFiles返回的数组,一次用于GetFiles创建的集合OrderBy@BrokenGlass可以我会将其更改为EnumerateFiles。我不知道您可以将整个Linq语句像这样与parens组合。您希望在该语句中使用EnumerateFilescase@BrokenGlass:为什么?无论如何,在检索所有文件之前都不会有结果。否则,您将需要两倍的内存,一次用于GetFiles返回的数组,一次用于GetFiles创建的集合OrderBy@BrokenGlass好的,我把它改成枚举文件。这是真的。我目前正在处理一些滚动需求,这些需求可能会在周五开会时发生变化。@Tomalak True,但有人说一次处理两个文件,因此在这种情况下,我需要目录中最旧的两个文件。我只是想看看如何用列表来处理这个问题。@fullNelson:你甚至需要返回列表而不是IEnumerable吗?如果您只是按顺序返回文件,那么调用方可以决定是调用Take1还是Take2…@JonSkeet这是个好主意。我同意这样的看法。虽然我的答案可能已经解决了你眼前的问题,但乔恩的答案更好。这是真的。我目前正在处理一些滚动需求,这些需求可能会在周五开会时发生变化。@Tomalak True,但有人说一次处理两个文件,因此在这种情况下,我需要目录中最旧的两个文件。我只是想看看如何用列表来处理这个问题。@fullNelson:你甚至需要返回列表而不是IEnumerable吗?如果您只是按顺序返回文件,那么调用方可以决定是调用Take1还是Take2…@JonSkeet这是个好主意。我同意这样的看法。虽然我的答案可能解决了你眼前的问题,但乔恩的答案更好。