0

上了一节课:

 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)));

我在 和 中有相同的文件ListFolderFiles但在results. 我是Linq的新手。哪里有问题?

更新: 列表:(计数)> 1000 例如:<1023,'tr_F2opervag_2808_1644.dat'>

FolderFiles 示例:“\\domain.corp.dns\share\folder\tr_F2opervag_2808_1644.dat”

更新2:发现我的错误!与交叉点的评论很有帮助!此代码有效:

  var results = List.Where(
            (filedate x) =>
            {
                return ! FolderFiles.Any(xxx =>
                Path.GetFileNameWithoutExtension(xxx) ==
                Path.GetFileNameWithoutExtension(x.fname));
            });
4

2 回答 2

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();
于 2012-09-07T16:18:02.947 回答
0

你的代码对我来说很好,所以从数据库返回的 List 中的数据格式有问题。

发布fname来自 filedata 对象的值的示例。它必须是有效的完全限定路径。

这对我来说很好。

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);
}
于 2012-09-07T16:19:55.250 回答