I'm having problems with a LINQ to SQL query in the following scenario:
- I have items that have "Tags" applied via a bridge table.
- I'm trying to filter a list of items to a subset that contain all of a specified set of tags and return the filtered list of items as the query result.
Tables Involved:
Item (ItemId, Name, ...other fields)
Tag (TagId, TagName)
Item_Tag(ItemId, TagId)
As an example if I had a list of Items with tags:
- Item1 w/ (Tag1, Tag2)
- Item2 w/ (Tag1, Tag2)
- Item3 w/ (Tag1)
and I wanted to get all items where the item has both Tag1 AND Tag2 where the filter requirement is provided as an int[] of the required tagIds.
Assuming the Item and Tag Id's match the number at the end of the name. The filter for this example would be:
int[] tagFilterConditions = int[2]{1, 2};
var query = from i in itemList
//define filter here
where the result would be: Item1,Item2 (excludes Item 3 b/c it isn't tagged with Tag1 AND Tag2)
I'm having a tough time figuring out how to combine these tables to apply that filter on the source list, I've tried using a predicate builder and various joins but just can't get the correct results.
Thanks, for any help...