问题描述
var filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv").Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .OrderBy(x => x.Date) .Where(x => x.Date >= LastCreatedDate);
我想知道最新的x.Date
的价值请注意,我不需要filepath而不是我需要DATE
推荐答案
var mostRecent = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") .Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .OrderBy(x => x.Date) .Where(x => x.Date >= LastCreatedDate) .LastOrDefault();
或
var mostRecent = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") .Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .OrderByDescending(x => x.Date) .Where(x => x.Date >= LastCreatedDate) .FirstOrDefault();
其他推荐答案
只需撤消订单 - 还要在订购之前进行过滤:
var filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv").Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .Where(x => x.Date >= LastCreatedDate) .OrderByDescending(x => x.Date) .FirstOrDefault();
相反,我建议您使用DirectoryInfo's GetFiles(),而是返回FileInfo实例,这样您就不必手动抓住最后的写作时间:
var di = new DirectoryInfo(@"\\Pontos\completed\"); var file = di.GetFiles("*_*.csv") .Where(f=> f.LastWriteTimeUtc >= LastCreatedDate) .OrderByDescending(f => f.LastWriteTimeUtc) .FirstOrDefault(); if(file!=null) { Console.WriteLine("Path: {0}, Last Write Time: {1}", file.FullName, file.LastWriteTimeUtc); }
其他推荐答案
f#具有我喜欢使用的方便MaxBy()函数; C#实施是微不足道的.它允许您避免对序列进行排序的成本.
有关更多详细信息,请参见此答案: https://stackoverflow.com/a/a/a/8759648/385844
用法:
var mostRecent = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") .Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .Where(x => x.Date >= LastCreatedDate) .MaxBy(x => x.Date);
问题描述
var filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv").Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .OrderBy(x => x.Date) .Where(x => x.Date >= LastCreatedDate);
i would like to know the value of the most recent x.Date
from this linq statement how can i get the most recent date?
please note that i do not need the filepath rather i need the DATE
推荐答案
var mostRecent = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") .Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .OrderBy(x => x.Date) .Where(x => x.Date >= LastCreatedDate) .LastOrDefault();
or
var mostRecent = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") .Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .OrderByDescending(x => x.Date) .Where(x => x.Date >= LastCreatedDate) .FirstOrDefault();
其他推荐答案
Just reverse the order - also do the filtering before the ordering:
var filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv").Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .Where(x => x.Date >= LastCreatedDate) .OrderByDescending(x => x.Date) .FirstOrDefault();
Instead I would suggest you use DirectoryInfo's GetFiles() instead which returns FileInfo instances so you don't have to grab the last write time manually:
var di = new DirectoryInfo(@"\\Pontos\completed\"); var file = di.GetFiles("*_*.csv") .Where(f=> f.LastWriteTimeUtc >= LastCreatedDate) .OrderByDescending(f => f.LastWriteTimeUtc) .FirstOrDefault(); if(file!=null) { Console.WriteLine("Path: {0}, Last Write Time: {1}", file.FullName, file.LastWriteTimeUtc); }
其他推荐答案
F# has a handy MaxBy() function that I like to use; the C# implementation is trivial. It allows you to avoid the cost of sorting the sequence.
See this answer for more detail: https://stackoverflow.com/a/8759648/385844
usage:
var mostRecent = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") .Select(p => new { Path = p, Date = System.IO.File.GetLastWriteTime(p) }) .Where(x => x.Date >= LastCreatedDate) .MaxBy(x => x.Date);