zoukankan      html  css  js  c++  java
  • C#数据查询出来的内容生成实体类

    以前写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;
    }



  • 相关阅读:
    草稿~!
    Jmeter使用:JSON返回数据处理
    Jmeter使用:操作MySQL
    jmeter+ant+jenkins 搭建接口自动化测试环境
    【未完成】Jmeter接口自动化测试:参数化设置
    RDLC报表系列(六) 多图表-折线图和柱状图
    RDLC报表系列(五) 简单的图表-柱状图
    RDLC报表系列(四) 矩阵
    流程图里的形状符号的含义及意义(转 )
    Login failed for user 'NT AUTHORITYNETWORK SERVICE'的解决方法
  • 原文地址:https://www.cnblogs.com/yimiao/p/2226846.html
Copyright © 2011-2022 走看看