【发布时间】:2016-08-27 22:51:31
【问题描述】:
我有一个这样的表结构:
表 tbUser
--ID (int)
--名称(varchar)
--生日(日期时间)
--评分(双)
什么时候
"SELECT * FROM tbUser"
我希望查询结果中的每一行看起来像(将每一列转换为字符串格式):
row["ID"] = "1";
row["Name"] "John"
row["Birthday"] = "1980-01-01"
row["rating"] = "3.4"
我需要字符串的原因是它们易于操作/格式化/显示并且有时更安全(如果另一位工程师更改了 DB 中的列类型——例如“评级”列从 double 更改为 int,该程序不太可能抛出异常,因为它只关心字符串)
我知道有一种方法可以将 DapperRow 转换为 IDictionary<string, object>,它非常接近 IDictionary<string, string>;
var result = conn.Query("SELECT * FROM tbUser");
foreach (IDictionary<string, object> row in result) {
// I have to write my own object->string conversion in every loop
}
非常感谢任何建议!
【问题讨论】:
-
你能不能只创建自己的类并解析返回的结果。完全控制返回的内容?
-
If another engineer changed column type in DB --e.g. "rating" column changed from double to int, the program is less likely throw exception as it only cares about strings只是让你知道 - 这是可怕的想法。这只会隐藏问题并使其无法调试。你想要努力失败并快速失败。您不想将值视为某种是但不是的。如果工程师更改了列的类型,则意味着原始代码错误,因此也应根据类型更改进行更新。
标签: c# .net string dictionary dapper