基于集合属性名称的数据集数据行的动态linq

本文关键字:数据集 数据 linq 动态 于集合 集合 属性 | 更新日期: 2023-09-27 18:23:55

我正在处理一个连接到Oracle的项目。它通过数据集带回数据。我使用Linq将其绑定到一个集合,并将其返回给json读取。它效果很好,但我忍不住想——必须有更好的方法来做到这一点。这是我所做的一个例子。我希望它能帮助别人。Dsp是数据集。

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"名称"标记匹配,这提供了一个很好的健壮绑定。我担心的是浏览每个字段名称以填充列表<>对象

集合(get/set)属性与数据集列名匹配的地方是否有特定的where子句,从而仅在列名(而不是值)与数据行列匹配时填充集合?

基于集合属性名称的数据集数据行的动态linq

我推荐AutoMapper。。。看看这个问题。

这里有一个非常简单的例子。确保您的.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;
        }
    }
}