有一堂课:
class filedate
{
public int id;
public string fname;
}
使用值填写我的列表:
List<filedate> List = ReadList(sqlFiles);
string[] FolderFiles = System.IO.Directory.GetFiles(path2Copy);
试图获得结果:
var results = List.Where(filedate =>
FolderFiles.Any(x=>Path.GetFileNameWithoutExtension(x) ==
Path.GetFileNameWithoutExtension(filedate.fname)));
我在List
和FolderFiles
中有相同的文件,但在results
中没有结果。我是Linq的新手。问题在哪里?
更新 清单:(计数)&gt; 1000 例如: &lt; 1023,'tr_F2opervag_2808_1644.dat'&gt;
FolderFiles示例: “\\ domain.corp.dns \共享\文件夹\ tr_F2opervag_2808_1644.dat”
更新2 : 发现我的错误!用十字路口评论很有帮助!这段代码正在运行:
var results = List.Where(
(filedate x) =>
{
return ! FolderFiles.Any(xxx =>
Path.GetFileNameWithoutExtension(xxx) ==
Path.GetFileNameWithoutExtension(x.fname));
});
答案 0 :(得分:0)
如果你需要找到差异,这应该有效。这可以通过Enumerable.Except获得。
var dbFiles = ReadList(sqlFiles);
var dbFilePaths =
dbFiles.Select(fdate =>
Path.GetFileNameWithoutExtension(fdate.fname).ToLower());
var fsFilePaths =
Directory
.GetFiles(path2Copy)
.Select(filePath =>
Path.GetFileNameWithoutExtension(filePath).ToLower());
var diff =
dbFilePaths
.Except(fsFilePaths)
.Join(dbFiles,
filePath => filePath,
fdate => fdate.fname,
(filePath, fdate) => fdate)
.ToList();
答案 1 :(得分:0)
你的代码对我来说很好,所以从数据库回来的列表中的数据格式有问题。
从filedata对象发布fname
值的示例。它必须是一个有效的完全合格的路径。
这对我来说很好。
public class FileData{
public int id;
public string fname;
}
void Main()
{
List<FileData> list = new List<FileData>{
new FileData { id=1, fname="C:\\install.res.1042.dll"},
new FileData { id=2, fname="C:\\install.res.1041.dll" },
new FileData { id=3, fname="C:\\install.res.9999.dll"}
};
string[] FolderFiles = System.IO.Directory.GetFiles("C:\\");
var results = list
.Where(fd =>
FolderFiles.Any(x=>Path.GetFileNameWithoutExtension(x) ==
Path.GetFileNameWithoutExtension(fd.fname)));
Console.WriteLine(results);
}