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です

 [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

私が解決しようとしている問題は、SQLを動的に取得するためにreportidを送信してから、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; }

サービスを使用するクライアントアプリケーションは、Silverlight4上に構築されています。

不明な点がある場合はお知らせください。更新できます。私が解決するために選んだルートについてはよくわかりません。この問題を解決できる他の方法はありますか?

アップデート:

更新しました。動的を使用しなくなりました。このルートが解決するかどうかはわかりません。

4

2 に答える 2

1

あなたの意図は高貴だと思いますが、効果的には絶えず変化するWebサービスを作成するでしょう。誰がそれを使うだろうか?私があなただったら、次のオブジェクトの1つを返します。

  1. 文字列の2Dテーブル(最初の行は一連のヘッダーで、残りの行はそれぞれ値を格納します)
  2. 文字列の1Dテーブル(プロパティ名-プロパティ値のペア)
  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 に答える