基于集合属性名称的数据集数据行的动态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子句,从而仅在列名(而不是值)与数据行列匹配时填充集合?
我推荐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;
}
}
}