2017-06-13 5 views
1

から呼び出す...ネストされたコンストラクタは、次の操作を行うための最善の方法は何Dapperの

conn.Query<Foo>(@"SELECT 1, 2, 'ZEBRA'"); 

セイFooは..And Barがコンストラクタを持っていそう...

public Foo(Bar test, string zebra) 

のようなコンストラクタを持っていますこのように:これは動作しません

public Bar(int one, int two) 

、何がachievするための最良の方法だろうe希望する結果。

+0

'fooは(文字列DERP、第INT、最初INT):この(新しいバー(第一、第二)、DERP){}' – Will

答えて

2

あなたは(詳細はこちらhttps://stackoverflow.com/a/8995135/229949ある)非ジェネリッククエリAPIを試みることができる:

conn.Query(@"SELECT 1 as one, 2 as two, 'ZEBRA' as zebra") 
    .Select(_ => new Foo(new Bar(_.one, _.two), _.zebra); 
1

は、彼らがそのようなコンストラクタの要件を持っている場合はDapperのから直接、あなたの本当のモデルに水和しようとしないでください。代わりに、プライベート/内部クラスに水和し、適切なモデルをインスタンス化して返します。

internal class FooBarQueryModel 
{ 
    public string Zebra { get; set; } 
    public int One { get; set; } 
    public int Two { get; set; } 
} 

conn.Query<FooBarQueryModel>(sql).Select(qm => new Foo(new Bar(qm.One, qm.Two), qm.Zebra)); 
+0

これは '動的' 行溶液上にいくつかの利点を有するであろうし、おそらく性能? –

関連する問題