Dapper:読者から辞書に読み込む

c# dapper

質問

私の読者は、最初のselect文の1つを持つストアドプロシージャから内容を読み込みます。

 select id , name from FSubsystem

選択されたステムのうち10個

私は以下のような辞書を宣言しました。Dictionary SubsystemMApping = new Dictionary();

var reader = connection.QueryMultiple(...);

辞書SubsystemMAppingに最初の文の値を読み込む必要があります。 id - toキーと名前 - 値

私はreader.Read.Todictionary()を使ってやってみましたが成功できませんでした。私はFunc&Actionにはあまり親しまれていません。私は私がTodictionaryの2つのオーバーロードを正しく理解できないと思う理由をdats。

誰も助けることができますか?

受け入れられた回答

あなたに返されたPOCOがあると想像してください。何かのようなもの

public class Item 
{
   public int Id { get; set;}
   public string Name { get; set;}
}

今度はあなたがIEnumerable<Item>を持っていると想像してください、そして、コレクションは(Dapperが返すものである可能性が最も高いです)

ToDictionaryメソッドを使用するには、2つの重要なオーバーロードがあります。

var dictionary = itemList.ToDictionary( item => item.Id );

これはDictionary<int,Item> item.Idます。辞書のキーはitem.Id各プロパティです。

キー/値のオーバーロード:

var dictionary = itemList.ToDictionary( item => item.Id , item => item.Name );

このオーバーロードは、指定されたitem.Idを使用してDictionary<int,string>を作成しますitem.Iditem.Name 、valueにはitem.Nameを指定します。

キーを決定するときに使用するカスタムの比較関数を渡すことを可能にする2つのオーバーロードがあります。


エキスパート回答

ジェネリックAPIについては、Stanは既にそれを説明しています。非汎用Read APIは、POCOを動的にバイパスすることもできます。

var lookup = reader.Read().ToDictionary(x => (int)x.id, x => (string)x.name);

基本的に、「動的」を介して、列を仮想プロパティとして再表示します。



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