2009-03-04 6 views
2

나는 C# 및 LINQ는 반드시 테이블 구조를 반환하지 않는 데이터 구조를 처리하는 일반적인 문제를 해결하는 방법을 결정하는 데 문제가 결과 집합에 대한 반환 유형, 대신 결과 집합을 확인합니다.어떻게 LINQ

나는 작동하는 저장 프로 시저를 가지고 있고, 내 DBML

[Function(Name="dbo.p_GetObject")] 
public int p_GetObject([Parameter(Name="ObjectType", DbType="NVarChar(200)")] string objectType, [Parameter(Name="ItemState", DbType="Bit")] System.Nullable<bool> itemState, [Parameter(Name="IsPublished", DbType="Bit")] System.Nullable<bool> isPublished) 
{ 
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), objectType, itemState, isPublished); 
    return ((int)(result.ReturnValue)); 
} 

DBML는 반환 형식은 (없음)이이 핵심 문제 일 수 있다고 말한다에 포함되어있다. 그러나 나는 결과 집합을 일치하는 DBML 개체가 없습니다.

SP에서 multple 행 세 열 (ID, 이름, 값)으로 설정 한 결과 3 개의 인자 및 리턴한다. 나는 이것에 대한 데이터 객체를 생성하고, 나는이에 대한 함수 호출을 작성하는 경우가

을 결과 집합 호출 할 수 있습니다, 나는 박히 :
public List<resultset> GetObject(string objectType, bool itemState, bool isPublished) 
{ 
    MyDataContext.p_GetObject(objectType, itemState, isPublished); 
} 

내 질문

은 다음과 같습니다

가 어떻게이 있나요 저장 프로 시저에 데이터 컨텍스트 호출 내 resultSet 개체를 채 웁니다? 더 나은 접근 방법이 있습니까? 반환 유형은 무엇입니까? SQL보기? 단순히, 즉 SET FMT_ONLY 문제 일 수 있습니다 당신의 SP를 이해하지 않는 경우 ... 좋은 제안을

답변

6

을 찾고 ...은 SP의 단순화 된 버전의 데이터를 생성하려고?

보통의 SP/1 매핑되지 않는 UDF의 : 기존 엔티티와 1은 발생 유형에 자신을 노출한다. 디자이너의 이름이 아닌 DBML 파일에서이 이름을 바꿀 수는 있지만 개인적으로는하지 않을 것입니다.

var typed = from row in cxt.SomeFunction(123) 
      select new MyType {Id = row.Id, Name = row.Name, ...} 

이 이유는 저장소 순도 일부이며, 부분적으로 방지하기 위해 : 나는 개인으로 SP를 표시하고 (저장소에 대해 정의) 내 자신의 POCO 타입으로 프로젝트 내 자신의 방법을 쓰는 경향이있다 예상치 못한 방식으로 DBML을 다시 작성하는 디자이너의 습관 ;-p 자세한 내용은 here을 참조하십시오.

+0

그냥 확실하게하려면 SP는 응용 프로그램에서 호출하고 잘 작동되고, 난 그냥 POCO로의 결과를 반환 할 수있는 최선의 방법을 모른다. 나는 당신이 언급 한대로 생성 된 유형을 조사 할 것이다. 위의 방법에 대한 구체적인 힌트가 도움이 될 것입니다. 고마워. 마크. –

+0

은 내가 추가 할 수 있습니다 모르겠어요 마크, 문제를 알아 냈어. 내 스토어드 프로 시저는 SQL이 입력 매개 변수를 기반으로 형성되고 SQL 문자열이 실행되는 동적 SQL을 사용하고있었습니다. 이러한 proc은 DBML 디자이너에서 유형을 자동 생성하지 않으므로 제안한 것처럼 독자적인 ISingleResult 을 작성해야했습니다. –

+0

... 당신이 모호한 영역을 명확히 경우, 나는 자세한 내용을 추가 할 수 있습니다 위와 같이 ... 중 하나의 이름을 변경 유형을 WSDL에서, 또는 자신의 유형을 생성하고 "선택"을 사용 - –