使用SQL函数将SQL Server存储过程转换为LINQ

时间:2012-09-10 09:41:00

标签: sql linq

前段时间我在创建数据透视表时请求了帮助。你们来找我,我现在有一个存储过程,可以创建我的数据库,并可以将结果存储在一个新表中。列是动态的,因此对于应用程序中的每个事务,列总是不同的。

我遇到的问题是我的应用程序是MVC并使用实体框架。由于数据库已建模,因此我无法使用动态列名创建动态表。在使用中,EF永远不会知道他们在那里,我的观点也不会。

看起来我需要将存储过程转换为LINQ语句,然后我可以从模型端处理它。

我的存储过程包含SQL Server STUFF函数,我不知道如何在LINQ语句中调用此函数。

SQL 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中使用它。

希望有意义,任何帮助都非常赞赏!

1 个答案:

答案 0 :(得分:0)

您可以通过ADO或使用ExecuteStoreQuery<DbDataRecord>

调用存储过程