我创建了一个返回结果集的存储过程。现在我需要使用Linq从Business Layer(.cs文件)调用此存储过程。
CREATE PROCEDURE GetApprovedContent
AS BEGIN
DECLARE @columns VARCHAR(1000)
DECLARE @query nVARCHAR(4000)
SELECT @columns = COALESCE(@columns + ',[' + Code + ']','[' + Code + ']')
FROM (
SELECT DISTINCT Code
FROM dbo.tblLanguages
) x
SET @query = '
SELECT *
FROM (
SELECT c.[id],c.[Content],t.[Tag], l.[Code],CASE WHEN r.[LanguageId] IS NULL THEN '''' ELSE ''YES'' END ''RequestLanguage''
FROM dbo.tblContents c CROSS JOIN dbo.tblLanguages l
LEFT OUTER JOIN dbo.tblRequestedLanguages r ON c.id= r.[ContentId] AND l.[id]=r.[LanguageId]
JOIN dbo.tblTags t ON c.[TagId]= t.[id]
WHERE [status] = (SELECT id FROM dbo.tblStatus WHERE [Status] =''Approved'')
) as s
PIVOT
(
MAX(RequestLanguage)
FOR [Code] IN ('+@columns+')
)AS piv'
EXECUTE(@query)
END
此过程返回Result-Set,其中列数未固定
Id Content Tag Lang1 Lang2 Lang3 Lang_n
1 Ball Sport Y N Y N
2 Bat Sport N Y N Y
那么如何使用linq调用此过程?
答案 0 :(得分:0)
关闭枢轴,以便您有一个已定义的列数。在查询后将内容集转移到内存中。
内存中枢轴示例:https://stackoverflow.com/a/167937/8155
另外,不要使用动态sql(因为你不在数据库中转动,你不需要)。