LINQ to SQL не может магически перевести произвольно C # в TSQL; ограниченный выбор обычно необходимого синтаксиса доступен внутри LINQ, но метод C # не будет работать.
Параметры:
- переписать функцию как UDF (в TSQL) и отобразить UDF в свой контекст данных (т.е. перетащить UDF на поверхность конструктора); используйте
myDataContext.MyUdf(args)
в LINQ
- примените вашу функцию только после того, как данные вернутся в .NET-land
- переписать функцию в виде LINQ-проекции
Я полагаю, что средний вариант самый простой в вашем сценарии. Например:
var productslist=
(from p in productsTable
select new {Id=p.Id,p.price}).AsEnumerable()
.Select(p => new {p.Id, Tax=myfunctions.calculateTax(p.price)});
AsEnumerable()
нарушает «композицию» - т. Е. Останавливает LINQ-to-SQL от попыток понять calculateTax
с точки зрения TSQL; только Id
и price
извлекаются из SQL; затем при обработке каждой строки применяет второй прогноз для расчета налога.