Это зависит от выбранного поставщика. С normal
LINQ над IEnumerable
запросами (например, LINQ to Objects) вы можете это сделать. Однако с большинством деревьев LINQ over Expression (таких как LINQ to SQL, LINQ to Entities, NHibernate, LLBLGen и т. Д. И т. Д.) Вы не можете. Эти провайдеры преобразуют дерево выражений в другой язык, такой как SQL, AD, SharePoint и т. Д. И т. Д. Они просто не знают, что делать с вашим пользовательским методом.
Вы можете решить это несколькими способами. Например, попробуйте написать код метода inline в запросе. Таким образом, поставщик знает, что с ним делать. Другой вариант - разрешить вызов метода вне дерева выражений. Например (извините, мой C #):
var q = (from a in context select a).AsEnumerable();
// q is an IEnumerable and the z method will be called by .NET instead
// of being translated to SQL.
var q2 = (from a in q select new { z = z("MYNAME") };