2012-02-09 10 views
2

私はOracleに接続するプロジェクトに取り組んでいます。データセットを介してデータを取り戻します。私はLinqをコレクションにバインドし、それをjsonが読み取れるように戻します。それは素晴らしいですが、私は助けることはできませんが、これを行うより良い方法があるはずです。ここに私がしていることの例があります。私はそれが他人を助けることを望む。 Dspはデータセットです。コレクションプロパティ名に基づく動的linqからデータセットへのデータロー

List<Information> lstSearch = null; 
    lstSearch = (from l in dsp.Tables[0].AsEnumerable() 

         select new Information 
         { 

          application_id = l["APPLICATION_ID"].ToString(), 
          hospital_name_1 = l["HOSPITAL_NAME_"].ToString(), 
          physical_address = l["PHYSICAL_ADDRESS"].ToString(), 
          // may have to add more here... 

         }).ToList<Information>(); 

// serialize and send back as a json string 
System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
        new System.Web.Script.Serialization.JavaScriptSerializer(); 

       string sJSON = oSerializer.Serialize(lstSearch.First()); 

理論的には、はいです。 "情報"コレクションは、素晴らしいコントロールを提供するページ上の各コントロールのhtml "name"タグと一致します。私の懸念は、 にList <>オブジェクトを移入するために各フィールド名を調べることにあります。

コレクション(get/set)プロパティがデータセットの列名と一致するwhere句がないため、列名(値ではない)がデータ行の列と一致する場合のみコレクションにデータが格納されますか?

答えて

1

AutoMapper ... this questionを参照してください。

ここは非常に簡単な例です。あなたの.NET型正確があなたのDBオブジェクトの構造を反映したり宣伝としてAutoMapperが動作しないことを確認してください:良いです

namespace EnumerableDT 
{ 
    class Program 
    { 
     public class Information 
     { 
      public int APPLICATION_ID { get; set; } 
      public string HOSPITAL_NAME { get; set; } 
      public string PHYSICAL_ADDRESS { get; set; } 
      public string SOME_OTHER_FIELD { get; set; } 
     } 

     static DataSet dsp = new DataSet(); 

     static void Main(string[] args) 
     { 
      dsp.Tables.Add(BuildDataTableStructure()); 
      dsp.Tables[0].Rows.Add(BuildRow()); 

      AutoMapper.Mapper.Reset(); 
      AutoMapper.Mapper.CreateMap<IDataReader, Information>(); 

      var il = AutoMapper.Mapper.Map<IDataReader, IList<Information>>(dsp.Tables[0].CreateDataReader()); 

      Console.ReadLine(); 
     } 

     static DataTable BuildDataTableStructure() 
     { 
      var dt = new DataTable(); 
      var dc = new DataColumn("APPLICATION_ID", typeof(int)); 
      dt.Columns.Add(dc); 
      dc = new DataColumn("HOSPITAL_NAME", typeof(string)); 
      dt.Columns.Add(dc); 
      dc = new DataColumn("PHYSICAL_ADDRESS", typeof(string)); 
      dt.Columns.Add(dc); 
      dc = new DataColumn("SOME_OTHER_FIELD", typeof(string)); 
      dt.Columns.Add(dc); 

      return dt; 
     } 

     static DataRow BuildRow() 
     { 
      DataRow dr = dsp.Tables[0].NewRow(); 
      dr["APPLICATION_ID"] = 1; 
      dr["HOSPITAL_NAME"] = "The Hospital"; 
      dr["PHYSICAL_ADDRESS"] = "123 Main St."; 
      dr["SOME_OTHER_FIELD"] = "Some Other Data"; 

      return dr; 
     } 
    } 
} 
+0

を。私はこれでもっとも確実に遊びます! – dawriter

関連する問題