嗨,我正在努力了解 Dapper。
我的情况是我想从查询中提取两个值到两个单独的字符串中。我不确定我是否以正确的方式解决这个问题,但这就是我正在做的:
string sql = @"Select type, name
FROM ZipData
WHERE Zip = @zip";
using (var multi = conn.QueryMultiple(sql, new { zip = zip }))
{
string result = multi.Read<string>().SingleOrDefault();
}
我得到了无法访问已处理的对象。对象名称:'GridReader'。尝试读取第二个字符串时。问题是它正确获取了第一个值,并且在我试图获取的阅读器中包含两个字段。我确定我滥用了api。
我在这里做错了什么?我用谷歌搜索过,但可以找到一个具体的例子。
最佳答案
您误用了 QueryMultiple
。这是为返回多个结果集的复合 SQL 语句定义的。就像是:
SELECT Foo FROM MyTable;
SELECT Bar FROM MyOtherTable;
另一方面,您试图从单个结果集中获取两个不同的列,因此您应该只使用普通的
Query
方法:var result = conn.Query(sql, new { zip = zip }).Single();
var type = result.type;
var name = result.name;
Query
返回一个可枚举(因为通常查询可以返回多行)。但是,您似乎只需要一行,因此我们在最后调用 .Single
来获取该行。从那里,返回类型是 dynamic
,因此您可以简单地引用 SELECT
语句中的列所隐含的属性: type
和 name
。关于c# - 来自单个查询的 Dapper 多个结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11163268/