2009-08-16 4 views
1

내 프로젝트의보고 엔진을 설계하고 있습니다. 프로젝트는 여러 리포트를 가지며, 각 리포트는 Linq 쿼리로 표현 될 수 있습니다. 일부는 매개 변수를 가지지 만 다른 매개 변수는 그렇지 않습니다.Linq 보고서를 처리하고 결과를 XML로 반환하는 일반적인 방법 찾기

내 고객의 요구 사항을 충족시키기 위해 쿼리의 결과를 XML 형식으로 반환해야만 자신의 취향에 따라 XSL 변환을 적용 할 수 있습니다.

내 계획은 지금까지 모든 보고서가 파생 될 추상 Report 기본 클래스를 갖는 것입니다. 기본 클래스는 다음과 같은 방법이 필요합니다

public virtual void SetParameter(string ParameterName, object Value) { 
    throw new NotImplementedException("This report does not accept parameters."); 
} 

public abstract object GetData(); // what return type? 

public XElement GetXMLData() { 
    // calls GetData() and uses some kind of reflection to turn the data into XML? 
} 

이 조금 더이 문제를 구체화하려면 SetParameter()은 매우 자명하다. GetData()은 Linq 쿼리를 포함하고 IEnumerable<'a> 유형을 반환합니다. 여기서 'a은 최종 결과의 익명 유형입니다. 하지만 분명히 뭔가를 익명 형식으로 선언 할 수는 없으므로 Linq 쿼리의 결과와 관련된 일반적인 방법이 필요합니다. 반환 된 필드를 반복하고 적절한 XML 스키마를 만들 수 있습니다.

GetData()의 반환 유형은 무엇입니까? 필드 이름/값을 얻으려면 어떻게해야합니까? 또는 내 목표를 달성하기위한 더 좋은 방법이 있습니까?

+0

데이터가 테이블 형식입니까, 아니면 반품에 하위 컬렉션이 있습니까? –

+0

반환 할 하위 컬렉션이 될 수 있습니다. 내 코드는 모든 컬렉션을 통해 (재귀 적으로) 작동해야하며 "프리미티브"유형 속성을 XML로 변환해야합니다. –

답변

1

데이터가 SQL 서버에 저장되어 있습니까?

SQL Server Reporting Services를 사용하지 않는 이유는 무엇입니까? SQL Server는 "무료"입니다. 보고서 엔진을 처음부터 구축하는 것보다 훨씬 생산적 일 것입니다.

+0

느리기 때문에 제한된 디자인 기능을 사용할 수 없으므로 pdf 엔진을 사용하면 편집 할 수없는 형식으로 pdf를 저장할 수 없으므로 외부 고객은 자신의 모양과 느낌을 작성하고 디자인 할 수 없으며 고객은 자신의 SQL을 작성할 수없고 생성 할 수 없습니다 보고서 ... –

1

원하는 보고서 유형에 대해 기본 보고서 클래스를 일반화 할 수 있습니까?

public class ReportBase<TEntity> { 
    public virtual void SetParameter<T>(string ParameterName, T Value) { 
     throw new NotImplementedException("This report does not accept parameters."); 
    } 

    public abstract TEntity GetData(); 

    public XElement GetXmlData() { 
     // calls GetData() and uses some kind of reflection to turn the data into XML? 
    } 
} 

또한 GetXmlData을 단순화 자체를 직렬화하는 방법을 노출하는 몇 가지 기본 유형으로 TEntity을 제한 할 수 있습니다. .NET의 내장 XML 직렬화 기능을 사용 해본 적이 있습니까?

관련 문제