Search code examples
.netlinqarraysfilter

LINQ - array property contains element from another array


I have a object (product), with a property of type 'array'
e.g. product.tags = {"tag1","tag2","tag9"}

I have an array of input tags to filter on.

... but this is not quite working:

List<string> filterTags = new List<string>() { "tag1", "tag3" };

var matches = from p in products
  where p.Tags.Contains(filterTags)
  select p;

Any recommendations? Thanks.


Solution

  • What is the Contains really meant to achieve? Do all items in Tags need to exist in filterTags? Or at least one of them? For the latter use Any and for the former use All. Your where line would change to:

    where p.Tags.Any(tag => filterTags.Contains(tag))
    

    or

    where p.Tags.All(tag => filterTags.Contains(tag))