如果目录中包含在不同日期创建的文件。我想得到约会。
是否可以使用linq查询执行此操作,或者我必须先读取所有文件并使用foreach循环来获取日期。
示例:
列表=
File_1 6/03/2016
File_2 6/03/2016
File_3 6/03/2016
File_4 6/03/2016
File_5 15/04/2016
File_6 21/04/2016
File_7 21/04/2016
File_8 21/04/2016
结果=
6/03/2016
15/04/2016
21/04/2016
由于
答案 0 :(得分:0)
显然你不能在没有迭代的情况下处理日期列表,但是你可以使用Linq来生成序列,如下所示:
var dateInfo =
Directory.EnumerateFiles(directoryName)
.Select(filename => new FileInfo(filename))
.Select(info => new {info.Name, info.CreationTime});
这将为您提供FullName
/ CreationTime
对的列表,其中FullName
是文件的完整路径,CreationTime
是创建时间文件。
你可以像这样处理它:
foreach (var item in dateInfo)
Console.WriteLine($"{item.FullName} created on {item.CreationTime}");
如果您只想要创建文件的(唯一)日期:
var uniqueDates = dateInfo.GroupBy(x => x.CreationTime.Date).Select(y => y.Key);
foreach (var date in uniqueDates)
Console.WriteLine(date);
最后,如果您需要订购日期:
var uniqueDates =
dateInfo.GroupBy(x => x.CreationTime.Date)
.Select(y => y.Key)
.OrderBy(z => z);
(当然,使用.OrderByDescending()
作为相反的顺序。)
如果您更喜欢Linq查询语法:
var uniqueDates =
from date in dateInfo
group date by date.CreationTime.Date into g
orderby g.Key
select g.Key;
或者将整个事情放在一个Linq查询中(可能在这里有点不可读,所以您可能希望将其保留为单独的查询,但这是为了完整性):
var uniqueDates =
from date in
from file in Directory.EnumerateFiles(directoryName)
select new FileInfo(file).CreationTime
group date by date.Date into g
orderby g.Key
select g.Key;
答案 1 :(得分:0)
根据@MatthewWatson的评论。
我已经制作了以下linq语句
var dateInfo = Directory.EnumerateFiles(Dir).Select(filename => new FileInfo(filename)).Select(i => new { i.LastWriteTime }).GroupBy(g => g.LastWriteTime.Date);
这样我就可以获得目录中使用的所有不同日期。