1 前言
现在项目中用到数据字典配置,使用者可以直接配置字典设置页面上想要展示的内容,但是现在有个问题是,我们为了字典配置能够通用,所以ITEMVAL
和ITEMNAME
都是NVARCHAR2(256)
,可是有个字典中,用户将ITEMVAL
统一设置成了int
数据,举个栗子,1、2、3等等,希望我们按照这个ITEMVAL
升序显示在页面上,但是我在数据库中通过ORDER BY ITEMVAL
,发现排出的顺序不是我想要的,正常来说应该是从值为个位数排到两位数,结果实际情况获取到的结果值是1,10,11,12,13,2,3,4,5.....
,所以需要对取出来的值通过Dictionary
的OrderBy
方法进行排序,然后我顺带学习了一下这个用法,为了避免信息问题,我隐藏了数据连接的一些关键词。
2 解决代码
2.1 方法体代码
1 | using System; |
2.2 后台调用代码
因为我是在一般处理文件(*.ashx.cs
)中写的,然后在页面后台处理文件(*.aspx.cs
)中,调用这个方法。
1 | //1-------------------------首先看一般处理文件(`*.ashx.cs`)的(class) |
3 思考探索
3.1 原始数据
1 | using System; |
3.2 通过自定义字段进行排序
关键语句
排序可以通过默认Dictionary
初始化的序号o => o.Key
进行排序,但是,还可以通过自定义属性o => o.Value.AGE
进行排序
1 | /// <summary> |
3.2 通过多条件进行排序
关键语句
排序可以通过默认Dictionary
可以通过自定义属性o => o.Value.AGE
进行排序之后,还可以通过o => o.Value.EXPER
进行再次排序。
1 | /// <summary> |
4 总结
如果在数据库数据中通过SQL
语句中多层ORDER BY xx DESC, xxx DESC,....
得出的结果值是正确的,那么最好是在SQL
中就写好,避免取出数据之后再排序,这样逻辑很累赘。
但是如果通过多层ORDER BY xx DESC, xxx DESC,....
得出的结果值不是正确的,就像我上文中,数据库中某个字段是NVARCHAR2()
、VARCHAR2()
和TEXT()
等等字符串数据类型,只能在取出来数据之后再转成int
或者double
等数据类型再进行排序操作,那么Dictionary
这排序方法就很实用。
1 | //举个栗子 |
虽然这个排序方法可以无限循环下去,但是从实际情况下,感觉这个在只有一两个排序条件的时候效率比较高,但是在有多个排序条件的时候,这个效率就感觉一般了。