c# – 除非在LINQ to Objects中模拟SQL,否则不在OR中
发布时间:2020-12-15 20:52:27 所属栏目:百科 来源:网络整理
导读:假设我有两个列表,分别包含源文件名和目标文件名列表. Sourcefilenamelist包含1.txt,2.txt,3.txt,4.txt文件 而Destinaitonlist有1.txt,2.txt. 我想写一个linq查询来找出SourceList中哪些文件在DestinationFile列表中不存在. 例如这里的输出将是3.txt和4.txt.
假设我有两个列表,分别包含源文件名和目标文件名列表.
Sourcefilenamelist包含1.txt,2.txt,3.txt,4.txt文件 而Destinaitonlist有1.txt,2.txt. 我想写一个linq查询来找出SourceList中哪些文件在DestinationFile列表中不存在. 例如这里的输出将是3.txt和4.txt. 编辑: 我的代码是 List<FileList> sourceFileNames = new List<FileList>(); sourceFileNames.Add(new FileList { FileNames = "1.txt" }); sourceFileNames.Add(new FileList { FileNames = "2.txt" }); sourceFileNames.Add(new FileList { FileNames = "3.txt" }); sourceFileNames.Add(new FileList { FileNames = "4.txt" }); List<FileList> destinationFileNames = new List<FileList>(); destinationFileNames.Add(new FileList { FileNames = "1.txt" }); destinationFileNames.Add(new FileList { FileNames = "2.txt" }); IEnumerable<FileList> except = sourceFileNames.Except(destinationFileNames); Filelist是一个简单的类,只有一个属性fileNames类型为string. class FileList { public string FileNames { get; set; } } 解决方法
不太难做到.在您的FileList类中,创建一个继承自IEqualityComparer<>的子类.
public class FileListComparer : IEqualityComparer<FileList> { public bool Equals(FileList x,FileList y) { if (x == null || y == null) { return false; } return x.FileNames.Equals(y.FileNames,StringComparison.OrdinalIgnoreCase); } public int GetHashCode(FileList obj) { return base.GetHashCode(); } } 然后当您调用Except时,请使用Comparer IEnumerable<FileList> except = sourceFileNames.Except(destinationFileNames,new FileList.FileListComparer() ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |