Sql 使用Linq从存储过程返回动态结果集
我创建了一个返回结果集的存储过程。现在我需要使用Linq从业务层(.cs文件)调用此存储过程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
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”??