использовать внешнюю функцию в LINQ - PullRequest
0 голосов
/ 30 марта 2011

возможно ли использовать внешнюю функцию в linq select resault? и как передать ему param?

sub x
Dim q = From a In contex Select New With {.z=z("MYNAME")}
end sub

function z(name as string)
return( name & "Something...")
end function

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Это зависит от выбранного поставщика. С 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") };
0 голосов
/ 30 марта 2011

Ответ и объяснение здесь в StackOverflow. Пожалуйста, посмотрите. И полное объяснение того, что вы пытаетесь сделать, можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...