想象一下照片标记系统......
public class Photo
{
public IList<Tag> Tags {get;set;}
}
public class Tag
{
public string Name {get;set;}
}
IList<Tag> tags = new [] {
new Tag{Name = "tag1"},
new Tag{Name = "tag2"}
};
IList<Photo> photos = GetAllPhotos();
这一行:
var results = //return photos when Photo.Tags contains BOTH tags
我可以使用LINQ运算符来实现此目的吗?
答案 0 :(得分:11)
不确定
// All the tags in "tags" are contained in p.Tags
var results = photos.Where(p => tags.All(tag => p.Tags.Contains(tag)));
或
// All the "tags" except the ones in p.Tags ends up as an empty set
var results = photos.Where(p => !tags.Except(p.Tags).Any());
编辑:请注意,这假设实际上你在Tag上有一个适当的相等实现。否则你需要像:
var results = photos.Where(p => !tags.Select(t => t.Name)
.Except(p.Tags.Select(t => t.Name)).Any());
答案 1 :(得分:0)
photos.Where(p => t.Tags.Contain(tags[0]) && t.Tags.Contains(tag[1]));
很难知道运营商Tag
有什么。