0

しばらく前に、ピボット テーブルの作成を手伝ってもらいました。皆さんが私のためにやってきて、ピボットを作成し、結果を新しいテーブルに保存できるストアド プロシージャができました。列は動的であるため、アプリケーション内のトランザクションごとに常に異なります。

私が抱えている問題は、アプリケーションが MVC であり、Entity Framework を使用していることです。データベースはモデル化されているため、動的な列名を使用してその場でテーブルを作成することはできません。使用中、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 に答える