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. 编程心法 之 Scrum - Agile 敏捷开发

    Scrum是一种敏捷开发的方法 先定一个能达到的小目标 Scrum 团队 包括产品负责人.开发团队和Scrum Master Product Owner 产品负责人:管理代办事项和优先级的唯一负责人. ...

  2. react中PureComponent浅对比策略

    PureComponent实现了Component中没有实现的shouComponentUpdata()方法,会对state和props进行一次浅对比,本文介绍一下浅对比策略 源码中,实现浅对比的函数 ...

  3. Python 标准类库- 因特网协议于支持之UUID

    标准类库- 因特网协议于支持之UUID by:授客 QQ:1033553122   测试环境 python3 UUID生成函数定义 uuid.getnode() 获取一个表示硬件地址的48位正整数.第 ...

  4. Android ble 蓝牙4.0 总结一

    本文介绍Android ble 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用,如果手机系统版本API level < 18,也是用不了蓝牙4.0的哦 ...

  5. 如何快速清理 docker 资源

    如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用.本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无 ...

  6. 为了约会,PM的领导能力篇来啦!

    之前我们花了很大力气阐述PM的过程能力成熟度,为的是让PM把项目管理得心应手,早点下班.可再完美的过程也要人来做啊!兄弟们要是不爽了,你还有心思约会么?那怎么才能管好组里的兄弟,让他们好好执行过程,早 ...

  7. C# 得到EXCEL表格中的有效行数和列数

    每种方法中上面的是Excel的行数,下面的是Excel的列数.方法七:经过加工修改已经可以读出来的是有效数据行 using Excel = Microsoft.Office.Interop.Excel ...

  8. HTML基础-------最初概念以及相关语法

    HTML概念以及相关语法 HTML HTML是一种类似于(c,java,c++)之类的语言,他是用来描述网页的一种语言.通过各种标签所代表的语义来构建出一个网页,再通过浏览器的渲染功能来实现该网页的各 ...

  9. 添加python虚拟环境

    在我centos上装有两个python版本 # 我在~/py3/目录下创建虚拟环境,该目录为python3的一个独立环境 [root@localhost /]# cd home [root@local ...

  10. Ubuntu 18.04 安装 Apache, MySQL, PHP7, phpMyAdmin

    https://blog.csdn.net/sanve/article/details/80770675