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

と に同じファイルがListありますFolderFilesが、 には結果がありません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

あなたのコードは私にとってはうまく機能するので、データベースから返されるリスト内のデータの形式に問題があります。

fnamefiledata オブジェクトの値の例を投稿してください。有効な完全修飾パスである必要があります。

これは私にとってはうまくいきます。

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 に答える