Dapper Dot Netを使ってデータベース結果から辞書オブジェクトにどのようにマップするのですか?

asp.net c# dapper

質問

私が次のような簡単な質問をしているとします。

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

私は次のような辞書オブジェクトにマップしたい:

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

私はDapperでどうやってこのことをしますか?

私はそれが次のようなものだと仮定します:

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

しかし、適切な構文を理解することはできません。

受け入れられた回答

すでに様々な方法が示されています。個人的に私は非ジェネリックAPIを使用します:

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);

:Dapper.NET 3.5バージョンを使用する場合、最初の、2番目の、戻り値の型を取るQueryメソッドでは、.NET 4.0と.NET 4.5のバージョンでオプションの引数を利用するため、より多くのパラメータを指定する必要があります。

この場合、次のコードが有効です。

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);

引数のほとんどはデフォルトに戻りますが、 splitOnが必要です。それ以外の場合はデフォルトで 'id'の値が設定されます。

' ID 'と ' Description 'の2つの列を返すクエリの場合、 splitOnを ' Description 'に設定する必要があります。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow