私のプロジェクトのレポートエンジンを設計しています。プロジェクトにはいくつかのレポートがあり、それぞれのレポートは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()
の返品タイプはどうすればよいですか?フィールド名/値を取得するにはどうすればよいですか?あるいは、私の目的を達成するためのよりよい方法がありますか?
データは表形式ですか、またはリターンにも子コレクションがありますか? –
リターンの子コレクションである可能性があります。私のコードは、すべてのコレクションを(再帰的に)処理し、「プリミティブ」型のプロパティをXMLに変換する必要があります。 –