Dapper ORMのQueryでカラム名を取得する方法

この記事は公開から3年以上経過しています。

Dapper ORMでデータクラスを使用せずにquery()を行ったとき、dynamic型の結果レコードから列名を取得する方法。


テスト用テーブルの定義とデータ

CREATE TABLE DAPPER_TEST(
  ID INT PRIMARY KEY,
  COL1 NVARCHAR(10),
  COL2 NVARCHAR(10),
  COL3 NVARCHAR(10)
);

INSERT INTO DAPPER_TEST VALUES(1, 'VAL1-1', 'VAL1-2', 'VAL1-3');


サンプルソースコード(C#)

using Dapper;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

namespace DapperTest211116
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            Console.Title = "DapperTest211116";

            using (var sqlCon = new SqlConnection("Server=localhost;Database=TestDB;Integrated Security=true;"))
            {
                var rows = sqlCon.Query("SELECT * FROM DAPPER_TEST");

                var columnNames = rows.OfType<IDictionary<string, object>>().First().Select(c => c.Key);
                foreach (var columnName in columnNames)
                {
                    Console.WriteLine(columnName);
                }
            }
            Console.ReadKey();
        }
    }
}


出力結果

file

ちなみにカラムのデータ構造がIDictionaryであることからカラム取得順序が保証されているか気になったため一応軽くソースを確認してみましたが、順序は保証されているように見受けられます。

https://github.com/DapperLib/Dapper/blob/6ec3804f2c44f2bf6b757dc3522bf009cc64b27d/Dapper/SqlMapper.DapperRow.cs

https://github.com/DapperLib/Dapper/blob/6ec3804f2c44f2bf6b757dc3522bf009cc64b27d/Dapper/SqlMapper.DapperTable.cs


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする