您好我正在使用linq消除重复文件名...
这些是要收集FileData
的条件。但是如何仅通过比较f.Name
属性的FileName来获得Distinct值。
我试过
IEnumerable<FileData> files = FastDirectoryEnumerator
.EnumerateFiles(myDirectory.FullName, "*.zip",
SearchOption.AllDirectories)
.Where(f => f.Size / 1024 > 750)
.Where(f => !f.Name.EndsWith(".reg.zip"))
.Where(f => f.Name.StartsWith("2001"));
从此可以获取唯一文件名.. ??
答案 0 :(得分:1)
使用GroupBy
方法:
IEnumerable<FileData> dats = FastDirectoryEnumerator
.EnumerateFiles(myDirectory.FullName, "*.zip", SearchOption.AllDirectories)
.Where(f => f.Size / 1024 > 750)
.Where(f => !f.Name.EndsWith(".reg.zip"))
.Where(f => f.Name.StartsWith("2001"))
.GroupBy(f => f.Name)
.Select(g => g.First());
或者在查询语法中:
IEnumerable<FileData> dats =
from f in FastDirectoryEnumerator.EnumerateFiles(…)
where f.Size / 1024 > 750 &&
!f.Name.EndsWith(".reg.zip") &&
f.Name.StartsWith("2001") &&
group f by f.Name into g
select g.First();
这将返回每个名称的第一个FileData
。如果您只想获得唯一的Name
值,则实际上更容易:
IEnumerable<string> dats = FastDirectoryEnumerator
.EnumerateFiles(myDirectory.FullName, "*.zip", SearchOption.AllDirectories)
.Where(f => f.Size / 1024 > 750)
.Where(f => !f.Name.EndsWith(".reg.zip"))
.Where(f => f.Name.StartsWith("2001"))
.Select(f => f.Name)
.Distinct();
或者在查询语法中:
IEnumerable<string> dats =
(from f in FastDirectoryEnumerator.EnumerateFiles(…)
where f.Size / 1024 > 750 &&
!f.Name.EndsWith(".reg.zip") &&
f.Name.StartsWith("2001") &&
select f.Name)
.Distinct();