在LINQ中获取集合之间的差异

时间:2010-04-06 15:54:23

标签: c# linq

我有一组图像路径,以及更大的Image对象集合(包含路径属性)。我有代码检查任何匹配的图像,但如果应该有四个匹配的图像路径(因为这是第一个集合中有多少),并且有少于这个,我怎么能得到丢失的图像路径写循环?

        List<string> ImagesToCheck = new List<string>()
        {
            "",
            "s",
            "ssdd"
        };

        IEnumerable<HtmlImage> Images = manager.ActiveBrowser.Find.AllControls<HtmlImage>();

        var v = from i in Images
                where ImagesToCheck.Any(x => x == i.Src)
                select i;

        if (v.Count() < 3)
        {

        }

所以我需要在标题为v的集合中获取 not 的项目,但是在ImagesToCheck中。

我怎么能用LINQ做到这一点?

由于

5 个答案:

答案 0 :(得分:2)

试试这个..

var images = from s in ImagesToCheck where !i.Any(c => c.Path == s) select s;

沿着这些方向的东西..

伊恩

答案 1 :(得分:0)

ImagesToCheck.Where(x =&gt;!v.Contains(x))

答案 2 :(得分:0)

var results = ImagesToCheck.Where(i => !v.Contains(i));

善,

答案 3 :(得分:0)

var images = from s in ImagesToCheck where i.All(c => c.Path != s) select s;

答案 4 :(得分:0)

自从这个答案发布以来已经有一段时间了,但Linq有Intersect和Except。最后一个将为您提供第一个集合中的所有项目,但第二个集合中的项目除外。 缺点是Except使用标准Equals()运算符或IEqualityComparer<T>,并且您在Path属性上匹配。但最终你将能够写出如下内容:

ImagesToCheck.Except(Images)

我认为这很整洁。