首页 / .NET / 正文

[Dapper].NET/C#程序开发中使用Dapper如何将查询的结果集映射到一个字典中?

8254 发布于: 2018-02-03 读完约需5分钟

问题描述

比如当前有如下的SQL查询语句:

string sql = "SELECT UniqueString, ID  FROM Table";

以上SQL语句查询出来的结果包含两个字段,现在想把这两个字段分别映射到一个字典中,其中的字典键为UniqueString对应的值,比如这样的:

Dictionary<string, int> myDictionary = new Dictionary<string, int>();

需要使用Dapper实现以上需求的映射,如下的实现是错误的:

myDictionary = conn.Query<string, int>(sql, new {  }).ToDictionary();

方案一

直接使用ToDictionary()方法:

var dict = conn.Query(sql, args).ToDictionary(
    row => (string)row.UniqueString,
    row => (int)row.Id);

方案二

var myDictionary = conn.Query<string, int, KeyValuePair<string,int>>(sql, (s,i) => new KeyValuePair<string, int>(s,i))
    .ToDictionary(kv => kv.Key, kv => kv.Value);

或者

string splitOn = "TheNameOfTheValueColumn";
var myDictionary = conn.Query<string, int, KeyValuePair<string,int>>(sql, (s,i) => new KeyValuePair<string, int>(s,i), null, null, false, splitOn, null, null)
        .ToDictionary(kv => kv.Key, kv => kv.Value);

方案三

首先,定义一个键值对对应的类:

public class MyRow
{
    public int Id { get; set; }
    public string UniqueString { get; set; }
}

然后,使用Dapper进行查询:

var sql = "SELECT UniqueString, ID  FROM Table";
var myDictionary = conn.Query<MyRow>(sql).ToDictionary(row => row.UniqueString, row => row.Id);

方案四

使用Dapper的静态扩展方法ExecuteReader(...)方法:

var sql = "SELECT UniqueString, ID  FROM Table";
var rows = new List<Dictionary<string, int>>();
using (var reader = cn.ExecuteReader(sql)) {
    while (reader.Read()) {
        var dict = new Dictionary<string, int>();
        for (var i = 0; i < reader.FieldCount; i++) {
            dict[reader.GetName(i)] = reader.GetInt32(i);
        }
        rows.Add(dict);
    }
}

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [Dapper].NET/C#程序开发中使用Dapper实现类似SQL语句中的Like查询的方法有哪些呢?

下一篇: [Dapper].NET/C#程序开发中使用Dapper批量插入数据集合的方法应该如何实现?

本文永久链接码友网 » [Dapper].NET/C#程序开发中使用Dapper如何将查询的结果集映射到一个字典中?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册