Ваша проблема в том, что LINQ-to-Entites должен перевести все, что вы ему даете, в SQL для отправки в базу данных.
Если это действительно то, что вам нужно сделать, вам придется заставить LINQ-to-Entities отозвать все данные и LINQ-to-Objects для оценки состояния.
Ex:
var aKeyword = "ACT";
var results = from a in db.Activities.ToList()
where a.Keywords.Split(',').Contains(aKeyword) == true
select a;
Имейте в виду, что это приведет к откату всех объектов из таблицы действий. Альтернативой может быть позволить БД выполнить первоначальный фильтр, а затем отфильтровать оставшуюся часть пути:
var aKeyword = "ACT";
var results = (from a in db.Activities
where a.Keywords.Contains(aKeyword)
select a).ToList().Where(a => a.KeyWords.Split(',').Contains(aKeyword));
Это позволит LINQ-to-Entities выполнять фильтр, который он понимает (string.Contains становится похожим запросом), который отфильтрует некоторые данные, а затем применит реальный фильтр, который вы хотите, через LINQ-to-Objects, как только вы получите объекты назад. Вызов ToList () заставляет LINQ-to-Entities выполнять запрос и создавать объекты, позволяя LINQ-to-Objects быть механизмом, выполняющим вторую часть запроса.