きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Dapperの結果のDapperRowのコレクションを単純なDictionaryのコレクションに変換する

DapperのQuery拡張メソッドを型引数ナシまたは型引数dynamicで実行すると、結果はDapper.SqlMapper.DapperRowのコレクションとして取得することになる。このDapperRow型これを単純なDictionary<string, object>のリストとして渡したい事象に遭遇したので、記述したコードをメモ。

    using (var cn = new Microsoft.Data.SqlClient.SqlConnection(connectionString))
    {
      cn.Open();
      var resut = cn.Query<dynamic>("SELECT * FROM [dbo].[User]")
          .Select(x => ((IDictionary<string, object>)x).ToDictionary(k => k.Key, v => v.Value))
          .ToList();


      // 列名のみ列挙
      foreach (var columnName in resut[0].Keys)
      {
        Console.Write($"{columnName},");
      }
      Console.WriteLine($"");

      // 行・列データを列挙
      foreach (var rec in resut)
      {
        foreach (var key in rec.Keys)
        {
          Console.Write($"{rec[key]},");
        }
        Console.WriteLine($"");
      }
    }

実行結果例:

UserGUID,Name,BirthDay,SomeId,
dd4a05bb-9da7-4981-bde4-2187427ebe2e,aAAAA,2005/03/03 0:00:00,99887,
881b4c15-c6d4-4c7f-b1d9-a1a082bfe64e,いいいい,2011/11/25 0:00:00,99887,
833b8b88-1c97-46f1-94b0-d11bfca73e68,あああ,2001/01/01 0:00:00,99887,
5cdc052f-3c70-4838-8250-fea41651ffa0,CCCCC,1996/02/11 0:00:00,99887,