使用Linq从存储过程返回动态结果集

时间:2014-08-06 11:29:21

标签: sql linq asp.net-mvc-4 linq-to-sql

我创建了一个返回结果集的存储过程。现在我需要使用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调用此过程?

1 个答案:

答案 0 :(得分:0)

关闭枢轴,以便您有一个已定义的列数。在查询后将内容集转移到内存中。

内存中枢轴示例:https://stackoverflow.com/a/167937/8155

另外,不要使用动态sql(因为你不在数据库中转动,你不需要)。