不久前,我在创建数据透视表方面寻求帮助。你们帮我解决了问题,我现在有一个存储过程,可以创建我的数据透视表并将结果存储在一个新表中。这些列是动态的,因此对于应用程序中的每个事务来说总是不同的。
我遇到的问题是我的应用程序是 MVC 并使用实体框架。因为数据库是建模的,所以我无法动态创建具有动态列名的表。在使用中,EF 永远不会知道它们的存在,我的观点也不会。
看起来我需要将存储过程转换为 LINQ 语句,然后我可以从模型端进行处理。
我的存储过程包含 SQL ServerSTUFF
函数,我不知道如何在 LINQ 语句中调用此函数。
带有 SQL STUFF 功能的 SQL 示例:
DECLARE @cols AS VARCHAR(MAX),
@query AS VARCHAR(MAX);
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + convert(varchar(10), t2.date, 101)
FROM test AS t2
ORDER BY '],[' + convert(varchar(10), t2.date, 101)
FOR XML PATH('')
), 1, 2, '') + ']'
set @query = 'select name, ' + @cols + '
from
(
select name, date, cast(yesno as tinyint) as yesno
from test
) x
pivot
(
max(yesno)
for date in (' + @cols + ')
) p'
execute(@query)
MSDN有这个方法:
[EdmFunctionAttribute("SqlServer", "STUFF")]
public static string Stuff(
string stringInput,
Nullable<int> start,
Nullable<int> length,
string stringReplacement
)
...但我不知道我将它放在哪里以及如何在 LINQ 中使用它。
希望这是有道理的,非常感谢任何帮助!