• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#数据查询出来的内容生成实体类

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

以前写PHP查询出来都是数组也很容易去循环操作,突然用了.NET有点不习惯 不知道该如何去操作。

现在记录下,利用泛型和反射将数据内容转化成对应的实体类。

听说效率很低,这个先不管了。能用就行。

public class Mapping {
public static T Entity<T>(IDataReader reader,Dictionary<string,int> dictionary) {
var type = typeof(T);
//T u = new T();
T u = Activator.CreateInstance<T>();

PropertyInfo[] field = type.GetProperties();
int index = -1;
foreach (var f in field) {
if (dictionary.TryGetValue(f.Name, out index)) {
var r = reader.GetValue(index);
if(r != DBNull.Value)
f.SetValue(u, r, null);
}
}
return u;
}
}




传入的参数第一个不用解释了,第二个参数我将代码贴出来。

Dictionary<string, int> dictionary = new Dictionary<string, int>();

var dr = cmd.ExecuteReader();
int count = dr.FieldCount;
for (int i = 0; i < count; i++) {
dictionary.Add(dr.GetName(i), i);
}



这么做只是为了方面下面反射的时候从字典中取得对应的属性名称和他所对应的键。

下面这是完整的查询并转化成实体类的代码

public List<T> findAll<T>() {
var list = new List<T>();
//var parame = new List<QueryParameter>();
//parame.Add("uid");
Dictionary<string, int> dictionary = new Dictionary<string, int>();
using (SqlConnection conn = new SqlConnection(sqlConnectionString)) {
String sql = "SELECT uid,username FROM Users ORDER BY uid DESC";

SqlCommand cmd = new SqlCommand(sql, conn);
//SqlParameter p = new SqlParameter("@uid", 1);
//cmd.Parameters.Add(p);

conn.Open();

var dr = cmd.ExecuteReader();
int count = dr.FieldCount;
for (int i = 0; i < count; i++) {
dictionary.Add(dr.GetName(i), i);
}

while (dr.Read()) {
list.Add(Mapping.Entity<T>(dr,dictionary));
}

dr.Close();
conn.Close();
}
return list;
}




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Label Web Part for SharePoint Portal Server 2003 [Source Codes in C#]发布时间:2022-07-13
下一篇:
C#变量中的问号发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap