この記事は公開から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();
}
}
}
出力結果
ちなみにカラムのデータ構造がIDictionaryであることからカラム取得順序が保証されているか気になったため一応軽くソースを確認してみましたが、順序は保証されているように見受けられます。
参考ウェブサイトなど
- GitHub
DapperLib/Dapper
以上です。