我正在为我的项目设计一个报告引擎。该项目将有几个报告,每个报告可以表示为Linq查询;有些会有参数,有些则没有。
现在为了满足客户的要求,我需要以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模式。 / p>
GetData()
的返回类型应该是什么?如何获取字段名称/值?或者,有没有更好的方法来实现我的目标?
答案 0 :(得分:1)
您的数据是否存储在SQL Server中?
如果是这样,为什么不使用SQL Server Reporting Services?它与SQL Server“免费”。它比从头构建报表引擎要高效得多。
答案 1 :(得分: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?
}
}
您还可以将TEntity
限制为公开如何序列化自身的某种基本类型,从而简化GetXmlData
。您是否考虑过使用.NET的内置XML序列化功能?