datareader转dictionary有很多用处,可以输出表中部分字段转实体字段,以前需要全部字段输出或者再建一个实体模型才行,这样就可以减少数据库的输出量了,特别是某些接口的格式化输出很方便。

先看底层代码部分

        /// <summary>
/// DataReader转Dictionary<string, object>数据类型/// </summary>
/// <param name="dataReader"></param>
/// <param name="close"></param>
/// <returns></returns>
public static List<Dictionary<string, object>> GetListDictionary(IDataReader dataReader, bool close = true)
{
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
if (close)
{
using (dataReader)
{
while (dataReader.Read())
{
list.Add(DataFillDictionary(dataReader));
}
} }
else
{
while (dataReader.Read())
{
list.Add(DataFillDictionary(dataReader));
}
}
return list;
} /// <summary>
/// 将DataReader数据转为Dictionary<string, object>对象/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static Dictionary<string, object> DataFillDictionary(IDataReader reader)
{
Dictionary<string, object> dict = new Dictionary<string, object>();
for (int i = ; i < reader.FieldCount; i++)
{
try
{
dict.Add(reader.GetName(i), reader.GetValue(i));
}
catch
{
dict.Add(reader.GetName(i), null);
}
}
return dict;
}

调用

        private void GetWebUserList(HttpContext context)
{
string jsonResult = string.Empty;
var modifiedOn = context.Request["modifiedOn"];
var list = new List<Dictionary<string, object>>(); using (var dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType, BaseSystemInfo.UserCenterDbConnection))
{
try
{ using (var dr = new BaseUserManager(dbHelper).GetWebUserList(modifiedOn))
{
if (dr != null)
{
list = DbLogic.GetListDictionary(dr);
}
}
var timeConverter = new IsoDateTimeConverter { DateTimeFormat = BaseSystemInfo.DateTimeFormat };
jsonResult = JsonConvert.SerializeObject(list, Formatting.Indented, timeConverter);
}
catch (Exception ex)
{
NLogHelper.Warn(ex, "GetWebUserList异常");
}
finally
{
dbHelper.Close();
}
}
}

获取数据的方法

        /// <summary>
/// 向官网同步用户信息
/// 只传部分字段
/// </summary>
/// <returns></returns>
public IDataReader GetWebUserList(string modifiedOn)
{
string commandText = "SELECT A." + BaseUserEntity.FieldId
+ " ,A." + BaseUserEntity.FieldUserName
+ " ,A." + BaseUserEntity.FieldRealName
+ " ,A." + BaseUserEntity.FieldCode
+ " ,A." + BaseUserEntity.FieldCompanyId
+ " ,A." + BaseUserEntity.FieldCompanyName
+ " ,A." + BaseUserEntity.FieldCompanyCode
+ " ,B." + BaseUserContactEntity.FieldMobile
+ " ,B." + BaseUserContactEntity.FieldModifiedOn
+ " FROM " + BaseUserEntity.TableName + " A "
+ " LEFT JOIN " + BaseUserContactEntity.TableName + " B "
+ " ON A." + BaseUserEntity.FieldId + " = B." + BaseUserContactEntity.FieldId; // 不传时间 一条记录也不要给
if (!string.IsNullOrWhiteSpace(modifiedOn))
{
var dbParameters = new List<KeyValuePair<string, object>>(); //查询条件参数集合
commandText += " WHERE B." + BaseUserContactEntity.FieldModifiedOn + " > TO_DATE(" + this.DbHelper.GetParameter(BaseUserContactEntity.FieldModifiedOn + ",'yyyy-MM-dd HH24:mi:ss')");
// songbiao 做一下限制
commandText += " AND ROWNUM <= 300";
dbParameters.Add(new KeyValuePair<string, object>(BaseUserContactEntity.FieldModifiedOn, modifiedOn));
return this.DbHelper.ExecuteReader(commandText, dbHelper.MakeParameters(dbParameters));
} return null;
}

输出

上面输出的是数据库字段,我们只需改下查询语句(field as modelfield),也可以输出实体属性。

可以有选择输出表中部分字段,这个方法加上好处很多。

DataReader转Dictionary数据类型之妙用的更多相关文章

  1. Tuple<int, int> Dictionary<string, object>妙用

    Tuple<int, int> Dictionary<string, object>妙用

  2. List、Tuple、Set、Dictionary数据类型

    一.List数据类型 1.概述:list(列表)中可以包含多个元素,且元素类型可以不相同. 每一元素可以是任意数据类型,包括列表(即列表嵌套)及后面要介绍的元组.集合.字典. 所有元素都写在一对方括号 ...

  3. .NET程序员细数Oracle与众不同的那些奇葩点

    扯淡 距上次接触 Oracle 数据库已经是 N 年前的事了,Oracle 的工作方式以及某些点很特别,那会就感觉,这货就是一个奇葩!最近重拾记忆,一直在折腾 Oracle,因为 Oracle 与众不 ...

  4. Python用法摘要 BY 四喜三顺

    函数的定义:def function_name(parameters):    block    return expression 自带函数:abs(-9)    #取绝对值round(3.4)   ...

  5. 转:python dict按照value 排序

    我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...

  6. (转)Python 字典排序

    我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...

  7. python的sorted

    读入后,要进行组内排序,按groupseq字段排序后,然后统计前后两个项的个数,累加到全局. sorted函数使用如下: def sortlist(alllist):     sorted_key1_ ...

  8. python dict sorted 排序

    https://www.cnblogs.com/linyawen/archive/2012/03/15/2398292.html 我们知道Python的内置dictionary数据类型是无序的,通过k ...

  9. python的dict如何排序

    Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排 # ...

随机推荐

  1. 2016年第七届蓝桥杯javaB组 试题 答案 解析

    1.煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤 ...

  2. JavaScript 是如何工作的:JavaScript 的共享传递和按值传递

    摘要: 原始数据类型和引用数据类型的副本作为参数传递给函数. 原文:JavaScript 是如何工作的:JavaScript 的共享传递和按值传递 作者:前端小智 Fundebug经授权转载,版权归原 ...

  3. Android中的线程池

    在Android中,主线程不能执行耗时的操作,否则可能会导致ANR.那么,耗时操作应该在其它线程中执行.线程的创建和销毁都会有性能开销,创建过多的线程也会由于互相抢占系统资源而导致阻塞的现象.这个时候 ...

  4. libevent 实现的socket 通信 server以及解决找不到动态库的方法

    注: client 个人觉得没必要用 libvent来实现就没写 注:由于 涉及到回调函数的使用 如有疑惑的可以先去了解回调函数的实现机理 先来说一下 libevent主要是干啥的 : 内部封装了 s ...

  5. 经典51道SQL查询练习题

    数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course( ...

  6. js 学习之路9:运算符

    1. 算数运算符 运算符 描述 例子 结果 + 加 x=y+2 x=7 - 减 x=y-2 x=3 * 乘 x=y*2 x=10 / 除 x=y/2 x=2.5 % 求余数 (保留整数) x=y%2 ...

  7. UI自动化之日志

    Python自动化测试中,日志输出功能是不能缺少的一部分.让我们来看看如何实现日志的输出吧 一.控制台输出日志 def get_logger(): try: if not os.path.exists ...

  8. 03 前端篇(JS)

    参考博客:http://www.cnblogs.com/yuanchenqi/articles/5980312.html JavaScript包括三部分: ECMAScript.DOM.BOM Jav ...

  9. RAC Wait Event: gcs log flush sync 等待事件 转

    RAC Wait Event: gcs log flush sync https://www.hhutzler.de/blog/rac-wait-event_gcs_log_flush_sync/#o ...

  10. uWSGI、WSGI、uwsgi是什么?

    uWSGI是一个web服务器,它实现了WSGI协议.uwsgi协议.HTTP等协议: WSGI是web服务器网管接口,是一套协议,用于接收用户请求并将请求进行初次封装,然后交给web框架: uwsgi ...