3

Dapper.net を使用することにしたのは、私がやりたいことだけを行っているように見えるためです: マッピング、空想は必要ありません。データリーダーとオブジェクトの間のマッピングを処理するのに退屈しています。

私の問題 :

これらのクラスがあるとしましょう:

class Foo{
int ID;
string Name;
}
class Bar : Foo{
string FavoriteMoovie;
}

そして、これらのテーブル:

Foo 
- ID
- Name

Bar
- FooID
- FavoriteMoovie

同じクエリで Foo と Bars を選択する方法を知りたいですか?

これまでの私の唯一の考えは

  • バーではないすべての Foo を選択します
  • 次に、すべてのバーを選択します

ここには関係をマッピングするためだけにあるため、メソッド「Query」のオーバーロードは使用できません。

4

2 に答える 2

2

非常にハッキーですが、これはおそらく機能します。

db.Query<Bar, object, Foo>("select * from Foo left join Bar on FooID = ID",
 (bar,ignore) => 
   bar.FavoriteMoovie == null ? bar : new Foo{ID = bar.ID, Name = bar.Name});

欠点は、それがなくても実行できるいくつかの中間オブジェクトを作成することです。

他のオプションは、単にBarオブジェクトを選択してから同じトリックを使用してFoosを除外するか、ダイナミックを選択してから正しいクラスに変換することです。

個人的には、NULLFavoriteMoovieを許可している場合を除いて、これを処理するためだけに2回クエリを実行することはありません。許可する場合は、クエリを複雑にするか、2回選択するしかありません。

于 2011-12-18T09:41:48.797 に答える