加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.
我是通过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() );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读