【问题标题】:Looking for a generic way to handle Linq reports & return results in XML寻找一种通用的方法来处理 Linq 报告并以 XML 形式返回结果
【发布时间】:2009-08-16 11:37:20
【问题描述】:

我正在为我的项目设计一个报告引擎。该项目将有几个报告,每个报告都可以表示为一个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 模式的方式。

GetData() 的返回类型应该是什么?如何获取字段名称/值?或者,有没有更好的方法来实现我的目标?

【问题讨论】:

  • 数据是表格格式还是返回中也有子集合?
  • 可能是退货中的子集合。我的代码需要通过所有集合(递归?)工作并将“原始”类型属性转换为 XML。

标签: c# xml linq generics anonymous-types


【解决方案1】:

您的数据是否存储在 SQL Server 中?

如果是这样,为什么不使用 SQL Server Reporting Services?它随 SQL Server “免费”提供。这比从头开始构建报表引擎要高效得多。

【讨论】:

  • 因为速度慢,不能加粗,设计能力有限,pdf引擎不允许你将pdf保存为不可编辑的格式,外部客户无法编写和设计自己的观感,客户不能自己写sql和生成报告...
【解决方案2】:

您能否使您的基本报表类对所需的数据类型具有通用性?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2016-07-21
    • 2017-04-16
    • 2021-07-06
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多