我有一个标量值函数如下:
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 Query中使用此函数。我想要实现的查询如下:
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
我的实体框架查询是:
(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函数。但我找不到一个真实的例子。任何人都可以帮忙吗?
答案 0 :(得分:1)
尝试以下方法:
EdmFunctionAttribute
应用于该方法。有关详细信息,请查看此link。
答案 1 :(得分:0)
看起来我应该更好地搜索它。我发现解决方案建议here。 github链接是CodeFirstFunctions。