![](/img/trans.png)
[英]How to compare and select particular object from list using 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)));
我在List
和FolderFiles
有相同的文件,但结果没有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.