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;
    }



  • 相关阅读:
    Mediawiki 子页链接无效的问题
    变量存储区:堆和栈
    《modern-php》
    HttpApplication处理对象与HttpModule处理模块
    Asp.Net构架(Http请求处理流程)
    Quartz.NET 3.0
    WebApi路由
    RESTful架构
    WCF
    TCP/IP协议
  • 原文地址:https://www.cnblogs.com/yimiao/p/2226846.html
Copyright © 2011-2022 走看看