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

C# 在LINQ中获取集合之间的差异,c#,linq,C#,Linq,我有一个图像路径集合,还有一个更大的图像对象集合(包含路径属性)。我有代码来检查任何匹配的图像,但是如果假设有四个匹配的图像路径(这是第一个集合中的数量),并且少于这个路径,那么如何在没有写循环的情况下获得缺少的图像路径呢 List<string> ImagesToCheck = new List<string>() { "", "s", "ssdd"

我有一个图像路径集合,还有一个更大的图像对象集合(包含路径属性)。我有代码来检查任何匹配的图像,但是如果假设有四个匹配的图像路径(这是第一个集合中的数量),并且少于这个路径,那么如何在没有写循环的情况下获得缺少的图像路径呢

        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)
        {

        }
List ImagesToCheck=新列表()
{
"",
“s”,
“可持续发展战略文件”
};
IEnumerable Images=manager.ActiveBrowser.Find.AllControls();
var v=图像中的i
其中ImagesToCheck.Any(x=>x==i.Src)
选择i;
如果(v.Count()<3)
{
}
因此,我需要获取标题为v的集合中不存在的项目,但在ImagesToCheck中

我怎么能和LINQ一起做这件事

谢谢,试试这个

var images = from s in ImagesToCheck where !i.Any(c => c.Path == s) select s;
沿着这条线的东西

Ian

ImagesToCheck.其中(x=>!v.Contains(x))

善良


Dan

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

ImagesToCheck.Except(Images)

我认为这很好。

您是否在ImagesToCheck中查找未在作为.Src收集的图像中使用的任何路径?
var results=ImagesToCheck.Where(I=>!v.Contains(thisImage=>thisImage.Path==I))
var images = from s in ImagesToCheck where i.All(c => c.Path != s) select s;
ImagesToCheck.Except(Images)