Dapper:如何从查询中读入字典列表?
Dapper: How to read into list of Dictionary from query?
Dapper 提供了多种将数据映射到动态对象列表的方法。但是在某些情况下,我想将数据读取到字典列表中。
SQL 可能看起来像:
"SELECT * FROM tb_User"
由于 tb_User 可能会在外部发生变化,我不知道结果 return 的列是什么。 所以我可以这样写一些代码:
var listOfDict = conn.QueryAsDictionary(sql);
foreach (var dict in listOfDict) {
if (dict.Contains("anyColumn")) {
// do right thing...
}
}
Dapper 是否有任何内置方法来进行这种转换?
您可以将每一行转换为 IDictionary:
var row = (IDictionary<string, object>)conn.Query("select foo = 1, bar = 'bar'").First();
Assert.That(row["foo"], Is.EqualTo(1));
Assert.That(row["bar"], Is.EqualTo("bar"));
您可以使用 System.Linq
中的 Cast
扩展方法
IEnumerable<IDictionary<string, object>> rows;
rows = connection.Query(sqlRequest).Cast<IDictionary<string, object>>();
foreach (var row in rows)
{
var columnValue = row['columnName']; // returns the value of the column name
}
您可以为查询分配别名,使其与 KeyValuePair
的 Key
和 Value
属性相匹配,然后使用 .ToDictionary
方法,如下所示:
var dict = db.Query<KeyValuePair<string, int>>(@"
SELECT COMMUNITY_TYPE As Key, COUNT(*) AS Value
FROM SNCOMM.COMMUNITY
GROUP BY COMMUNITY_TYPE")
.ToDictionary(x => x.Key, x => x.Value);
现在您有一个 Dictionary<string, int>
,无需任何手动转换。
Dapper 提供了多种将数据映射到动态对象列表的方法。但是在某些情况下,我想将数据读取到字典列表中。
SQL 可能看起来像:
"SELECT * FROM tb_User"
由于 tb_User 可能会在外部发生变化,我不知道结果 return 的列是什么。 所以我可以这样写一些代码:
var listOfDict = conn.QueryAsDictionary(sql);
foreach (var dict in listOfDict) {
if (dict.Contains("anyColumn")) {
// do right thing...
}
}
Dapper 是否有任何内置方法来进行这种转换?
您可以将每一行转换为 IDictionary:
var row = (IDictionary<string, object>)conn.Query("select foo = 1, bar = 'bar'").First();
Assert.That(row["foo"], Is.EqualTo(1));
Assert.That(row["bar"], Is.EqualTo("bar"));
您可以使用 System.Linq
Cast
扩展方法
IEnumerable<IDictionary<string, object>> rows;
rows = connection.Query(sqlRequest).Cast<IDictionary<string, object>>();
foreach (var row in rows)
{
var columnValue = row['columnName']; // returns the value of the column name
}
您可以为查询分配别名,使其与 KeyValuePair
的 Key
和 Value
属性相匹配,然后使用 .ToDictionary
方法,如下所示:
var dict = db.Query<KeyValuePair<string, int>>(@"
SELECT COMMUNITY_TYPE As Key, COUNT(*) AS Value
FROM SNCOMM.COMMUNITY
GROUP BY COMMUNITY_TYPE")
.ToDictionary(x => x.Key, x => x.Value);
现在您有一个 Dictionary<string, int>
,无需任何手动转换。