如何在 EntityFramework 查询中使用标量值函数

How to use Scalar Value functions in EntityFramework Query

我有一个标量值函数如下:

CREATE FUNCTION [dbo].[GetCustomersTime]
(
    @TimeSpanType char(1),
    @TimeSpan int,
    @CurrentUtc datetime
)
RETURNS datetime
AS
BEGIN
    DECLARE @CustomersTime DATETIME; 

    SELECT @CustomersTime = CASE UPPER(@TimeSpanType)
       WHEN 'S' THEN DATEADD(Second, @TimeSpan, @CurrentUtc)
       WHEN 'I' THEN DATEADD(Minute, @TimeSpan, @CurrentUtc)
       WHEN 'H' THEN DATEADD(Hour, @TimeSpan, @CurrentUtc)
       WHEN 'D' THEN DATEADD(Day, @TimeSpan, @CurrentUtc)
       WHEN 'W' THEN DATEADD(Week, @TimeSpan, @CurrentUtc)
       WHEN 'M' THEN DATEADD(Month, @TimeSpan, @CurrentUtc)
       WHEN 'Q' THEN DATEADD(Quarter, @TimeSpan, @CurrentUtc)
       WHEN 'Y' THEN DATEADD(Year, @TimeSpan, @CurrentUtc)
       ELSE DATEADD(SECOND, @TimeSpan, @CurrentUtc)
    END;

    RETURN @CustomersTime
END

我想在 Entity Framework 查询中使用这个函数。我想实现的查询如下:

SELECT c.CustomerId, c.FirstName, c.LastName, c.OrderDateUtc
FROM dbo.Customer c
--Other INNER JOINs
WHERE dbo.GetCustomersTime(c.[TimeSpanType], c.[TimeSpan], c.OrderDateUtc) > GetUtcDate()
--Additional Conditions

我的 entity framework 查询是:

(from c in _context.Customers
                 //additional joins
             where //how to use function
             select new
             {
                 c.CustomerId,
                 c.FirstName,
                 c.LastName,
                 c.OrderDateUtc
             }).ToList();

有人建议使用项目并在 EF 查询中使用 GetCustomersTime 函数。但我找不到一个真实的例子。有人可以帮忙吗?

尝试以下操作:

  1. 在 .edmx 文件的 (SSDL) 中声明一个函数。的名称 function 必须与声明的函数名相同 数据库。
  2. 在您的应用程序代码中的 class 添加相应的方法,然后 对方法应用 EdmFunctionAttribute
  3. 在 LINQ to Entities 查询中调用该方法。

有关详细信息,请查看此 link

看来我应该更好地搜索它。我发现建议的解决方案 here. The github link is CodeFirstFunctions