Ответ 1
Невозможно использовать пользовательские методы или свойства с LINQ to Entities, так как LINQ to Entities должен иметь возможность преобразовать выражение в оператор SQL, который он не может сделать с вашим методом.
Способ обойти - обходить LINQ to Entities и вместо этого использовать LINQ to Objects с помощью Enumerable
вместо Queryable
(обратите внимание на AsEnumerable()
в приведенном ниже коде):
static void GetHaendler()
{
using (var riaService = new gkmRia())
{
var hladany = "someone";
var haendlers = from hndlr in riaService.GetGkmHaendlerOutlet().AsEnumerable()
where hndlr.NameOutlet.NoWhiteSpaces() == hladany.NoWhiteSpaces()
select hndlr;
Console.Write(haendlers.First().NameOutlet);
}
}
Обратите внимание, что это приводит к тому, что запрос выполняется в вашем приложении, а не в базе данных, поэтому могут возникнуть некоторые последствия для производительности. Если возможно, может быть предпочтительнее изменить запрос, чтобы его можно было выразить с помощью методов поддерживаемых платформой Entity Framework.
Альтернативное выражение, поддерживаемое LINQ to Entities, может быть следующим:
var hladany = "someone".NoWhiteSpaces();
var haenflers = from hndlr in riaService.GetGkmHaendlerOutlet().
where hndlr.NameOutlet.Replace(" ", "").Replace("\t", "") == hladany
select hndlr;
В этом примере обрабатываются только пробелы и вкладки (регулярное выражение также обрабатывает разные пробельные символы), но я не знаю ваших точных требований, чтобы их было достаточно. Вы всегда можете подключить больше вызовов Replace
для выполнения дополнительных заметок.