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

.NET 作者: Rector 123阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

比如当前有如下的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如何将查询的结果集映射到一个字典中?

发布于: 2018-02-03 17:26:54
分享扩散:

文章评论

获取验证码