LINQ to SQL no puede mágicamente traducir arbitrario C# a TSQL; una selección limitada de la sintaxis necesaria comúnmente está disponible dentro de LINQ, pero un método C# no va a funcionar.
Opciones:
- reescribir la función como una UDF (en TSQL) y mapa de la UDF a los datos de contexto (es decir, arrastrar el UDF sobre la superficie diseñador);
myDataContext.MyUdf(args)
utilizar en LINQ
- aplique su función de una sola vez los datos están de vuelta en la tierra NET-
- re-escribir la función como LINQ proyección
espero que la opción de en medio es el más fácil en su guión. Por ejemplo:
var productslist=
(from p in productsTable
select new {Id=p.Id,p.price}).AsEnumerable()
.Select(p => new {p.Id, Tax=myfunctions.calculateTax(p.price)});
Los AsEnumerable()
rompe "composición" - es decir, que se detenga LINQ a SQL de tratar de entender calculateTax
en términos de TSQL; solo el Id
y el price
se recuperan de SQL; luego mientras procesa cada fila aplica la segunda proyección para calcular el impuesto.
¿'calculateTax' es un procedimiento/función almacenada en su DB? – Gabe
no .es una función en mi código – lafama
Marque el enlace arriba del enlace "documento". tiene un dll que le permite usar .ToExpandable() en sus consultas de Linq – lafama