假设我有两个列表,分别包含源文件名和目标文件名列表.
Sourcefilenamelist包含1.txt,2.txt,3.txt,4.txt文件
而Destinaitonlist有1.txt,2.txt.
我想写一个linq查询来找出SourceList中哪些文件在DestinationFile列表中不存在.
例如这里的输出将是3.txt和4.txt.
我是通过foreach声明完成的.但现在我想通过使用LINQ(C#)来做同样的事情.
编辑:
我的代码是
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() );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。