2012-02-09 65 views
2

我正在開發一個連接到Oracle的項目。它通過數據集提取數據。我使用Linq將其綁定到一個集合,並將其返回給json讀取。它運作良好,但我不禁想到 - 有一個更好的方法來做到這一點。這是我做的一個例子。我希望它能幫助別人。 Dsp是數據集。動態LINQ到基於集合屬性名稱的數據集datarow

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」標籤相匹配,提供了一個很好的強大綁定。我的關注點在於讓 遍歷每個字段名稱,以便填充列表對象。

只有在列名稱(不是值)與數據行列匹配時,collection(get/set)屬性與數據集列名稱匹配才能填充集合嗎?

回答

1

我推薦AutoMapper ...參見this question

下面是一個非常簡單的例子。請確保您的.NET類型正是反映您的數據庫對象的結構,或與廣告宣傳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 2012-02-09 01:29:14