Как объясняет Pranay, пользовательский метод (C #) не может быть частью запроса LINQ to SQL, поскольку LINQ to SQL не сможет просматривать дерево выражений метода и поэтому не может перевести его в SQL.
Один из вариантов, который у вас есть, - написать свою функцию на SQL и сохранить ее как функцию SQL на SQL Server (возможно, вы также можете использовать SQL CLR, но я этого не пробовал). Затем вы можете добавить функцию к вашему типу DataContext
, и LINQ to SQL преобразует ее в вызовы функции на сервере SQL. Что-то вроде:
var result = from u in context.MyTable
where context.MyMethod(u) == 10 select u;
Проблема, конечно, в том, что вам нужно написать функцию на SQL (я думаю, что SQL CLR также может работать - хотя и не уверен в производительности и других возможных сложностях)
Я также написал статью (некоторое время назад), в которой показано, как это сделать, когда вы пишете "метод" в виде дерева выражений (как значение типа Expression<Func<...>>
), который возможно, потому что в этом случае код компилируется как дерево выражений. Однако есть некоторая постобработка, которая должна быть выполнена, и вы все равно можете написать только одно выражение, которое можно легко вставить в запрос LINQ.