微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 除非在LINQ to Objects中模拟SQL,否则不在OR中

假设我有两个列表,分别包含源文件名和目标文件名列表.

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] 举报,一经查实,本站将立刻删除。

相关推荐