2012-09-10 108 views
0

前一段時間,我詢問了如何創建數據透視表。你們爲我而來,我現在有一個存儲過程創建了我的數據透視表並可以將結果存儲在一個新表中。這些列是動態的,因此對於應用程序中的每個事務總是會有所不同。使用SQL函數將SQL Server存儲過程轉換爲LINQ

我遇到的問題是我的應用程序是MVC並使用實體框架。由於數據庫已建模,因此無法在具有動態列名稱的飛行表上創建。在使用中,EF永遠不會知道他們在那裏,我的意見也不會。

它看起來像我需要將存儲過程轉換爲LINQ語句,然後我可以從模型結束處理。

我的存儲過程包含SQL Server STUFF函數,我不知道如何在LINQ語句中調用此函數。

SQL實例與SQL STUFF函數:

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。

希望有道理,任何幫助非常感謝!

+0

東西功能僅用於撰寫樞軸查詢。它在你的EF模型中是無用的。在C#中,一個'string.Join'將會更容易。但這不是問題。問題是您無法捕獲複雜類型的動態記錄。 –

回答

0

您只需通過ADO調用存儲過程,或者使用ExecuteStoreQuery<DbDataRecord>

+0

問題是'DbDataRecord'不是一個固定的結構。 –

相關問題