Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用Linq从存储过程返回动态结果集_Sql_Linq_Asp.net Mvc 4_Linq To Sql - Fatal编程技术网

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

Sql 使用Linq从存储过程返回动态结果集,sql,linq,asp.net-mvc-4,linq-to-sql,Sql,Linq,Asp.net Mvc 4,Linq To Sql,我创建了一个返回结果集的存储过程。现在我需要使用Linq从业务层(.cs文件)调用此存储过程 CREATE PROCEDURE GetApprovedContent AS BEGIN DECLARE @columns VARCHAR(1000) DECLARE @query nVARCHAR(4000) SELECT @columns = COALESCE(@columns + ',[' + Code + ']','[' + Code + ']') FROM ( SELE

我创建了一个返回结果集的存储过程。现在我需要使用Linq从业务层(.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
此过程返回以下结果集,其中列数不固定

Id Content Tag Lang1 Lang2 Lang3 Lang_n
1  Ball  Sport Y      N     Y     N
2  Bat   Sport N      Y     N     Y

那么,我如何使用linq调用这个过程呢?

关闭轴,这样您就有了一个定义的列数。在查询后在内存中透视集合

内存中数据透视的示例:


另外,不要使用动态sql(因为您不需要在数据库中进行数据透视)。

请参阅MSDN上的此场景未获得帮助。您是否尝试以下操作:?如果不使用数据透视,我如何设置列名,因为可以有n种语言,语言名可以是“en-GB”,或者类似的“sr-SE”??