LINQ查询使用ALL

时间:2011-09-02 15:05:14

标签: c# linq

想象一下照片标记系统......

    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运算符来实现此目的吗?

2 个答案:

答案 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有什么。