Похоже, что вы пытаетесь сделать свой класс запросов LINQ доступным здесь. Когда вы участвуете в предложении LINQ Where, полученный предикат является функциональным объектом, а не строкой. Идея состоит в том, что вы применяете функцию предиката к каждому перечисляемому элементу и возвращаете только те, для которых функция возвращает "true".
LINQ-to-SQL смотрит на код внутри предиката, подобного этому, который, как предполагается, является выражением (например, лямбда-выражением), которое он может анализировать и преобразовывать в выражение SQL. Помните, что лямбда C # может быть сгенерирована компилятором либо в делегат, либо в дерево выражений (см. этот раздел MSDN ), в зависимости от типа, ожидаемого в выражении, в котором оно находится. Поэтому LINQ-to-SQL другими словами, много работы, чтобы превратить этот предикат во что-то, что может работать с ядром базы данных.
Если вы действительно используете LINQ, вам, вероятно, придется просто получить все записи в вашем запросе и затем отфильтровать их, используя предикат, если только это не представляет проблему масштабирования (зависит от того, насколько серьезно ваше приложение). Кроме того, вам нужно написать правильную функцию Where, которая возвращает объект IEnumerable и использует yield-return. См. эту страницу руководства (вам придется немного прокрутить вниз) или прочитайте главы LINQ в превосходном C # в книге «В двух словах».
С другой стороны, если вы на самом деле не заботитесь о LINQ и этот код просто совпадает с LINQ-y, просто измените тип аргумента на строку и заключите в кавычки выражение, которое вы хотите использовать.