0

不久前,我在创建数据透视表方面寻求帮助。你们帮我解决了问题,我现在有一个存储过程,可以创建我的数据透视表并将结果存储在一个新表中。这些列是动态的,因此对于应用程序中的每个事务来说总是不同的。

我遇到的问题是我的应用程序是 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 中使用它。

希望这是有道理的,非常感谢任何帮助!

4

1 回答 1

0

您可以通过 ADO 调用存储过程,或者使用ExecuteStoreQuery<DbDataRecord>

于 2012-09-10T13:02:36.327 回答