2012-09-10 3 views
0

얼마 전에 피벗 테이블을 만드는 데 도움을 요청했습니다. 너희들이 나를 위해 나와서 피벗을 만들고 결과를 새로운 테이블에 저장할 수있는 저장 프로 시저가 생겼다. 열은 동적이므로 응용 프로그램의 각 트랜잭션마다 항상 달라집니다.SQL 함수를 사용하여 SQL Server 저장 프로 시저를 LINQ로 변환

내 문제는 내 응용 프로그램이 MVC이고 Entity Framework를 사용한다는 것입니다. 데이터베이스가 모델링되었으므로 동적 열 이름을 사용하여 플라이 테이블에 작성할 수 없습니다. 사용 중에, 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.

희망이 있었으면 좋겠다.

+0

사용 할 수 있습니다. EF 모델에서는 쓸모가 없습니다. C#에서는'string.Join'이 훨씬 쉽습니다. 하지만 그건 문제가 아닙니다. 문제는 복잡한 유형의 동적 레코드를 캡처 할 수 없다는 것입니다. –

답변

0

당신은 ADO를 통해 저장 프로 시저를 호출, 또는 물건의 기능은 피벗 쿼리를 작성하는 데 사용됩니다 ExecuteStoreQuery<DbDataRecord>

+0

문제는'DbDataRecord'는 고정 된 구조가 아니라는 것입니다. –

관련 문제