Dapper:如何从查询中读入Dictionary列表?

ine*_*tia 6 c# sql dictionary dapper

Dapper提供了许多将数据映射到动态对象列表的方法.但是在某些情况下我想将数据读入Dictionary列表.

SQL可能看起来像:

"SELECT * FROM tb_User"
Run Code Online (Sandbox Code Playgroud)

由于tb_User可能会在外部更改,因此我不知道哪些列将返回结果.所以我可以写一些像这样的代码:

var listOfDict = conn.QueryAsDictionary(sql);
foreach (var dict in listOfDict) {
    if (dict.Contains("anyColumn")) {
        // do right thing...
    }
}
Run Code Online (Sandbox Code Playgroud)

Dapper有没有内置的方法来进行这种转换?

Voi*_*Ray 8

您可以将每行转换为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"));
Run Code Online (Sandbox Code Playgroud)


Sam*_*ire 5

您可以使用Cast扩展方法System.Linq

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
}
Run Code Online (Sandbox Code Playgroud)