如何在 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 函数。但我找不到一个真实的例子。有人可以帮忙吗?
尝试以下操作:
- 在 .edmx 文件的 (SSDL) 中声明一个函数。的名称
function 必须与声明的函数名相同
数据库。
- 在您的应用程序代码中的 class 添加相应的方法,然后
对方法应用
EdmFunctionAttribute
。
- 在 LINQ to Entities 查询中调用该方法。
有关详细信息,请查看此 link。
看来我应该更好地搜索它。我发现建议的解决方案 here. The github link is CodeFirstFunctions。
我有一个标量值函数如下:
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 函数。但我找不到一个真实的例子。有人可以帮忙吗?
尝试以下操作:
- 在 .edmx 文件的 (SSDL) 中声明一个函数。的名称 function 必须与声明的函数名相同 数据库。
- 在您的应用程序代码中的 class 添加相应的方法,然后
对方法应用
EdmFunctionAttribute
。 - 在 LINQ to Entities 查询中调用该方法。
有关详细信息,请查看此 link。
看来我应该更好地搜索它。我发现建议的解决方案 here. The github link is CodeFirstFunctions。