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

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

概述假设我有两个列表,分别包含源文件名和目标文件名列表. Sourcefilenamelist包含1.txt,2.txt,3.txt,4.txt文件 而Destinaitonlist有1.txt,2.txt. 我想写一个linq查询来找出SourceList中哪些文件在DestinationFile列表中不存在. 例如这里的输出将是3.txt和4.txt. 我是通过foreach声明完成的.但现在我想 假设我有两个列表,分别包含源文件名和目标文件名列表.

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() );
总结

以上是内存溢出为你收集整理的c# – 除非在LINQ to Objects中模拟SQL,否则不在OR中全部内容,希望文章能够帮你解决c# – 除非在LINQ to Objects中模拟SQL,否则不在OR中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1226387.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存