如果我有一个简单的查询,例如:
string sql = "SELECT UniqueString, ID FROM Table";
我想把它Map到一个dictionary对象,比如
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
我该怎么和戴普做呢?
我想大概是这样的:
myDictionary = conn.Query<string, int>(sql, new { }).ToDictionary();
但却不知道正确的语法。
8条答案
按热度按时间rqenqsqc1#
我们已经展示了很多种方法我个人会使用非通用的API:
blpfk2vs2#
可以使用别名和强类型。
别名是关键点,与KeyValuePair类型Key和Value的属性匹配。
它在强类型下工作,运行良好。
gmxoilav3#
也可以在没有其他类的情况下工作:
注意:使用Dapper.NET 3.5版本时,接受第一个、第二个和返回类型的Query方法需要您指定更多参数,因为.NET 4.0和.NET 4.5版本利用optional arguments。
在这种情况下,下面的代码应该可以工作:
大多数参数将恢复为默认值,但
splitOn
是必需的,否则它将默认为'id'值。对于返回两列“ID”和“*Description *”的查询,
splitOn
应设置为“*Description *”。abithluo4#
如果你使用的是〉.net 4. 7或netstandard2,你可以使用值元组。代码很好很简洁,没有使用动态。
6psbrbz95#
Dapper还有一个
ExecuteReader
的扩展方法,所以,你也可以这样做:这种方法不需要知道列名,而且,如果不知道数据类型,可以将
Dictionary<string,int>
更改为Dictionary<string,object>
,将GetInt32(i)
更改为GetValue(i)
。6l7fqoea6#
我不确定你尝试做的事情是否可行,如果你定义一个类来Map查询,这就变得微不足道了:
然后,您只需执行以下操作:
zzoitvuj7#
对于在运行时不知道其结构的表
tag5nh1u8#
我个人更喜欢这样使用(1班轮):