EF Core 2 - как вызвать скалярную функцию? - PullRequest
0 голосов
/ 06 февраля 2019

Я использую EF Core 2.

У меня есть пользовательская функция в моем SQL.

    CREATE FUNCTION udfCPIAdjustedAmount
(
    @WorkOrderID int,
    @VendorContractPayItemID int,
    @Qty decimal,
    @QtyIdle decimal,
    @QtyOT decimal
)
RETURNS decimal(18,2)
AS
BEGIN
-- code replaced with something simple
    return @Qty * 2

END

Она объявлена ​​в моем классе DbContext следующим образом:

[DbFunction("udfCPIAdjustedAmount", "dbo")]
    public static decimal CPIAdjustedAmount(int WorkOrderID, int VendorContractPayItemid, decimal Qty, decimal QtyIdle, decimal QtyOT) { throw new Exception(); }

Я могу успешно позвонить с моего контроллера следующим образом:

decimal AdjustedAmount = (from wo in _context.WorkOrder
                                       where wo.WorkOrderID == WorkOrderID
                                       select PMSContext.CPIAdjustedAmount(WorkOrderID, VendorContractPayItemID, Qty, QtyIdle, QtyOT)).First();

Однако я чувствую, что должен быть более простой способ.Я не вижу смысла ссылаться на какую-либо конкретную таблицу в запросе LINQ (например, на таблицу WorkOrder в приведенном мной примере).Он возвращает десятичное значение и параметры в UDF не ссылаются на какие-либо данные запроса.

Я чувствую, что должен быть в состоянии сделать что-то вроде этого:

decimal AdjustedAmount = PMSContext.CPIAdjustedAmount(WorkOrderID, VendorContractPayItemID, Qty, QtyIdle, QtyOT);

Но это просто исключение.

Есть предложения?

TIA!

...