Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 830
Rob Avatar asked Mar 29 '10 16:03

Rob


1 Answers

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))
like image 96
Ahmad Mageed Avatar answered Oct 15 '22 02:10

Ahmad Mageed