如何返回具有最早日期时间的顶部FileInfo对象?
我需要能够查询本地目录中添加的文件。包含LINQ Query的方法将返回创建日期最早的文件。所以,操作顺序基本上是先进先出的情况。如何返回具有最早日期时间的顶部FileInfo对象?
请注意,我正在返回一个列表,因为要求可能会更改为返回多个文件。
我拿出来实现大部分的这个过程的代码如下:
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子句来限制最旧的文件被返回或什么?
var files = (from f in directory.EnumerateFiles()
orderby f.CreationTime ascending
select f).Take(1);
我不知道你可以像parens一样对整个Linq声明进行“分组”。 – 2012-02-07 19:58:58
你会想'EnumerateFiles()'在这种情况下 – BrokenGlass 2012-02-07 19:59:23
@BrokenGlass:为什么?无论如何,在检索所有文件之前不会有任何结果。 – Tomalak 2012-02-07 20:01:24
你说你想要返回一个列表,以防你以后需要多个文件 - 那么为什么要限制呢?你可能使用Take(1)
,但为什么不只是把一切都返回给调用者,并让他们他们决定他们想要什么?
如果您打算将其限制为“包含一个元素的列表”,您可以改为返回FileInfo
- 如果您要返回多个条目,则需要修改代码。
这是真的。我正在处理一些滚动要求,在我周五开会的时候可能会改变。 – 2012-02-07 20:01:15
+1,1元素列表不太有用。 – Tomalak 2012-02-07 20:18:39
@Tomalak真的,但一直在谈论处理两个文件,所以在这种情况下,我需要目录中最旧的两个文件。我只想看看我怎样才能用列表处理这个问题。 – 2012-02-07 20:24:23
你为什么要调用'Cast'? – 2012-02-07 19:56:54
@JonSkeet因为我返回的对象是一个List,并且IEnumerable不是一个列表,所以需要将其转换为一个来返回它。 – 2012-02-07 19:57:54
这就是为什么你要调用'ToList()',但'Cast()'仍然返回'IEnumerable'。 –
2012-02-07 20:00:54