4

私の読者は、最初のselectステートメントの1つを持つストアドプロシージャからコンテンツを読み取ります。

 select id , name from FSubsystem

10の選択されたstamentsから

そして私は以下のように辞書を宣言しましたDictionarySubsystemMApping= new Dictionary();

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

最初のselectステートメントの値を辞書SubsystemMAppingに読み取る必要があります。id-キーと名前-値へ

reader.Read.Todictionary()を使用して試しましたが、成功しませんでした。私はFunc&Actionにあまり詳しくありません。Todictionaryの2つのオーバーロードを正しく理解できないと思う理由を説明します。

誰か助けてもらえますか?

4

2 に答える 2

10

汎用APIについては、Stanがすでに説明しています。非汎用のReadAPIは、動的を介してPOCOをバイパスすることもできることを意味します。

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

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

于 2012-12-13T19:44:41.147 に答える
8

あなたがあなたに戻ってきた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プロパティです。

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

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

このオーバーロードはDictionary<int,string>、指定されitem.Idたforキーとitem.Namefor値を使用してを作成します。

キーを決定するときに使用するカスタム比較子を渡すことができるオーバーロードがさらに2つあります。

于 2012-12-13T19:07:15.250 に答える