我已经通过SQL Server中的存储过程创建了一个数据透视表。但问题是当我在实体框架中将SP添加到我的实体数据模型中时它会给我返回类型" INT"正如您在以下代码中看到的那样:
TestContext.cs:
public virtual int getMonthIsin(Nullable<System.DateTime> fromDate, Nullable<System.DateTime> toDate)
{
var fromDateParameter = fromDate.HasValue ?
new ObjectParameter("fromDate", fromDate) :
new ObjectParameter("fromDate", typeof(System.DateTime));
var toDateParameter = toDate.HasValue ?
new ObjectParameter("toDate", toDate) :
new ObjectParameter("toDate", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("getMonthIsin", fromDateParameter, toDateParameter);
}
当我单击功能导入中的SP(EDM)并调用列信息时,它会获得具有正确列的正确数据透视表。但我不知道如何使用WebApi返回它。
好吧,我的想法是,将数据透视表定义为LINQ查询。
这是SQL代码:
ALTER PROCEDURE [dbo].[getMonthIsin]
@fromDate datetime,
@toDate datetime
AS
BEGIN
DECLARE @colIsin nvarchar(max)
DECLARE @query nvarchar(max)
SET FMTONLY OFF;
WITH vals AS (
SELECT DISTINCT ds.QR_Fond_isin AS isin
FROM QR_DS021s ds
)
SELECT @colIsin = COALESCE(@colIsin + ', ', '') + '['+ isin +']'
FROM vals
ORDER BY isin
SET @query = 'SELECT *
FROM (SELECT ROUND(ds.ct_quot_rate,0) AS Erfuellungsgrad,
ROUND(ds.ct_quot_rate,0) AS Quote,
ds.QR_Fond_isin AS isin
FROM QR_DS021s ds INNER JOIN QR_Fonds f ON ds.QR_Fond_isin = f.isin
WHERE ds.datum >= @from_val AND ds.datum <= @to_val
) t
PIVOT (
COUNT(Quote)
FOR isin IN ('+ @colIsin +')
) p
ORDER BY Erfuellungsgrad DESC'
EXEC sp_executesql @query, N'@from_val datetime, @to_val datetime', @from_val = @fromDate, @to_val = @toDate
有人有想法在我的webapi中定义LINQ查询的SQL查询吗?或者如果可能的话,如何在WebAPI中定义存储过程?!