gpt4 book ai didi

c# - 基于集合属性名称的动态 linq 到数据集数据行

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:22 26 4
gpt4 key购买 nike

我正在从事一个连接到 Oracle 的项目。它通过数据集带回数据。我使用 Linq 将其绑定(bind)到一个集合并将其丢回以供 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“名称”标签相匹配,这提供了一个很好的健壮绑定(bind)。我关心的是有遍历每个字段名称以填充 List<> 对象。

在集合(获取/设置)属性与数据集列名匹配的地方是否有特定的 where 子句,因此仅当列名(而不是值)与数据行列匹配时才填充集合?

最佳答案

我推荐 AutoMapper ... 见 this question .

这是一个非常简单的例子。确保您的 .NET 类型完全反射(reflect)了您的 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;
}
}
}

关于c# - 基于集合属性名称的动态 linq 到数据集数据行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com