Скалярные функции с использованием BLToolkit и Linq

Я нахожусь в процессе преобразования своих процедур SQL в Linq с помощью библиотеки BLToolkit.

Теперь я застрял в небольшой проблеме, поэтому, если кто-нибудь знает, возможно ли это, я буду очень признателен за помощь.

Во всяком случае, у меня есть sql-запрос, который выглядит примерно так (ПРИМЕЧАНИЕ: это не мои настоящие имена таблиц, я просто перевел их, чтобы вы, ребята, могли понять, что происходит)

select
     P.ProductsID,
     P.Name,
     P.Description,
     dbo.GetTax(P.TaxID, getdate()) -- this is what I need help with
from
     Products P

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

Теперь мне нужно преобразовать это в Linq, но я не знаю, возможно ли это вообще. Я пробовал что-то вроде этого

from p in Products
select new
{
    p.ProductsID,
    p.Name,
    p.Description,
    GetTax(p.TaxID, DateTime.Today) //this is what I need help with
}

и это не работает. Функция GetWork — это, по сути, еще один запрос linq, который возвращает налог. Я не знаю, как вызвать скалярную функцию с помощью библиотеки BLToolkit.

Итак, вопрос в следующем. Можно ли вызывать скалярные функции из выбранного оператора Linq?


person Mladen Macanović    schedule 07.07.2011    source источник


Ответы (1)


Определите где-нибудь следующую функцию.

[SqlFunction(ServerSideOnly=true)]
public static double GetTax(int id, DateTime dt)
{
    throw new NotImplementedException();
}

Он скажет BLToolkit перевести GetTax в SQL.

person IT.    schedule 07.07.2011
comment
спасибо за ответ, но что мне нужно написать внутри тела этого метода, чтобы вернуть значение из серверной функции? - person Mladen Macanović; 08.07.2011
comment
Ничего. Пример завершен. Атрибут SqlFunction указывает BLToolkit не вызывать GetTax, а преобразовывать его в SQL. - person IT.; 08.07.2011
comment
хех, кто бы мог подумать, что это так просто, как не вы :) PS Если вы не видели, несколько дней назад я опубликовал вам вопрос на GitHub. - person Mladen Macanović; 09.07.2011