繁体   English   中英

如何使用Linq从字符串比较和选择值?

[英]How to compare and select values from string using Linq?

上过课:

 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的新手。 问题出在哪儿?

更新:列表:(count)> 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));
            });

如果您需要找到区别,那应该可以。 可通过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();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM