这些是我需要写的方法:
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
[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>
。我可以动态创建类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构建。
如果我不清楚,请告诉我,我可以更新它。我不确定我选择解决的路线。有没有其他方法可以解决这个问题。
更新
我已更新,我不再使用动态,不确定此路线是否会解决。
答案 0 :(得分:1)
通常,尝试在Web服务中使用特定于平台的类型是一个坏主意。例如,您不希望Java理解DataTable
类型。
我怀疑您在尝试返回dynamic
对象时会遇到同样的问题。这甚至不能通过服务的WSDL来描述,所以我怀疑任何调用者都不知道如何处理这样的返回值。
事实上,我不知道该服务甚至会将这样的事情序列化。
答案 1 :(得分:1)
我认为你的意图是高尚的,但实际上你会创造一个不断变化的网络服务。谁会用它?如果我是你,我会返回以下对象之一:
假设您只关心文本值,我显然可能是错的,但由于您使用的是报表,我认为这种情况很可能存在。
希望这有帮助, 彼得