I\'m struggling a bit here so I thought why not ask:
Every entity in my system has a list of tags (a list of strings), and I want to be able to search for multiple t
Not sure I really understand what you're asking, but maybe something like the following would work.
List<string> searchTags = ...
var query = db.MyEntity
.Where( e => e.Tags.Intersect( searchTags ).Count() > 0 );
This should give you the set of entities where the list of tags contains at least one of the items in searchTags
From here, this is some sql that will work for you:
SELECT entityID
FROM tags
WHERE tagID in (...) --taglist
GROUP BY entityID
HAVING COUNT(DISTINCT tagID) = ... --tagcount
Now the trick is getting Linq to produce it... Here's some LinqToSql code:
public List<int> GetEntityIds(List<int> tagIds)
{
int tagCount = tagIds.Count;
CustomDataContext myDC = new CustomDataContext();
List<int> entityIds = myDC.Tags
.Where(t => tagIds.Contains(t.TagId))
.GroupBy(t => t.entityId)
.Where(g => g.Select(t => t.TagId).Distinct().Count() == tagCount)
.Select(g => g.Key)
return entityIds;
}
A few caveats apply: