我有一组图像路径,以及更大的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做到这一点?
由于
答案 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)
我认为这很整洁。