我有以下查询:
SELECT
[Person].[Id] AS [Person_Id],
[Person].[Name] AS [Person_Name],
[Address].[Id] AS [Address_Id],
[Address].[Number] AS [Address_Number],
[Address].[Street] AS [Address_Street],
FROM [Person]
LEFT JOIN [Address] ON [Person].[addressId] = [Address].[Id]
Run Code Online (Sandbox Code Playgroud)
其中用于查询SQLite内存数据库:
var rows = _database.Query(query);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试读取值时,Int32我得到了InvalidCastException.
foreach (IDictionary<string, object> row in rows)
{
var someId = (int)row["Person_Id"];
var someNumber = (int)row["Address_Number"];
}
Run Code Online (Sandbox Code Playgroud)
我这样使用的原因dapper是,作为一个辅助项目,我正在构建一些功能,dapper以将值映射到POCO(我知道类似的项目,例如rainbow,dapper.extensions等).
所以有些东西:
var rowVal = row[fieldName];
propInfo.SetValue(obj, rowVal, null);
Run Code Online (Sandbox Code Playgroud)
同样,忽略与反射调用相关的性能成本.
在上面的例子中,属性类型POCO是int32因为这个问题我无法将值赋给obj.
非常感谢任何帮助或想法.
它不是Dapper,而是SQLite.请参阅SQLite版本3中的数据类型(假设您实际使用的是v3):
例如,INTEGER存储类包括6种不同长度的不同整数数据类型.这在磁盘上有所不同.乙UT只要整数值被从磁盘读取并进入存储器进行处理,它们被转换为最一般的数据类型(8字节符号整数).因此,在大多数情况下,"存储类"与"数据类型"无法区分,并且这两个术语可以互换使用.
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |