Вы можете использовать такой запрос в простом SQL для выполнения вашей задачи:
SELECT * FROM Songs
WHERE 'Dance' IN (Category1,Category2,Category3,Category4,Category5,Category6)
AND 'House' IN (Category1,Category2,Category3,Category4,Category5,Category6)
но насколько я помню Linq-to-entity не поддерживает IN
, поэтому вам понадобится что-то еще.
Еще один хакерский подход, который должен работать на EF 4.0 (здесь я предполагаю, что #
- это символ, который никогда не будет присутствовать в названиях вашей категории)
var result = Songs
.Select(s => new {Name = s.Name, SearchString = '#'+s.Category1+'#'+s.Category2+'#'+...+'#'})
.Where(p => p.SearchString.Contains("#Dance#") && p.SearchString.Contains("#House#"))
.Select(p => p.Name);
И последнее решение - нормализовать вашу базу данных.