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