1

这些是我需要写的方法:

List<Test> test = new List<Test>();
public List<Test> GetData(int ReportId)
     {
       StringBuilder qr = new StringBuilder();
       StringBuilder SQL = new StringBuilder();
       DataTable dt;

    qr.AppendLine(" select SQL");
    qr.AppendLine(" from  V_REPORT_SQL f");
    qr.AppendLine(String.Format(" where REPORT_ID = '{0}'", ReportId));

   dt = DataManager.GetDatadt(qr);
      foreach (DataRow dr in dt.Rows)
         {
           SQL.Append(dr[0].DBStr());
         }

        dt = DataManager.GetData(SQL);
        foreach (DataRow dr in dt.Rows)
         {
        Test t = new Test()
        {
         can i dynamically create and iterate over the properties and assign the datarow? 
        };

        test.Add(t);
    }
    return test;

    }

//这是数据合约

 [DataContract]
    public class Test
    {  
    }

表 V_Report_SQL

reportid | SQL
1        | select id,Name from table1
2        | select acctid,Name,date from table2
3        | select Name,location,date,XX,XX,XX from table3

我要解决的问题是我发送reportid 以动态获取sql,然后传递sql 并获取DataTable 中的数据。现在我需要将其发送为list<Test>. 我可以动态地为类测试创建属性吗?例如 :

     for report id 1

     [DataMember]
     public int Id { get; set; }

     [DataMember]
     public string Name { get; set; }

     for report id 2 

     [DataMember]
     public int acctid { get; set; }

     [DataMember]
     public string Name { get; set; }

     [DataMember]
     public DateTime date { get; set; }

使用该服务的客户端应用程序是在 silverlight 4 上构建的。

如果我不清楚,请告诉我,我可以更新它。我不确定我选择解决的路线。有没有其他方法可以解决这个问题。

更新:

我已经更新了,我不再使用动态,不确定这条路线会解决。

4

2 回答 2

1

我认为您的意图是崇高的,但实际上您将创建一个不断变化的 Web 服务。谁会使用它?如果我是你,我会返回以下对象之一:

  1. 二维字符串表(第一行将是一系列标题,其余的将分别存储值)
  2. 一维字符串表(属性名称 - 属性值对)
  3. 字符串(CSV 文件的平面内容)
  4. 二进制 CSV
  5. 您必须在客户端爬取的动态 XML

假设您只关心文本值,我显然可能是错误的,但由于您使用的是报告表,我认为这种情况很有可能发生。

希望这会有所帮助,Piotr

于 2012-10-05T16:21:31.257 回答
1

通常,尝试在 Web 服务中使用特定于平台的类型是个坏主意。例如,您不会期望 Java 能够理解DataTable类型。

我怀疑您在尝试返回dynamic对象时会遇到同样的问题。这甚至不能用服务的 WSDL 来描述,所以我怀疑任何调用者都知道如何处理这样的返回值。

事实上,我什至不知道该服务如何序列化这样的事情。

于 2012-10-04T19:47:06.773 回答