寻找处理Linq报告的通用方法&以XML格式返回结果

时间:2009-08-16 11:37:20

标签: c# xml linq generics anonymous-types

我正在为我的项目设计一个报告引擎。该项目将有几个报告,每个报告可以表示为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()的返回类型应该是什么?如何获取字段名称/值?或者,有没有更好的方法来实现我的目标?

2 个答案:

答案 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序列化功能?