2017-06-13 88 views
1

怎样做以下的最佳方式调用...嵌套构造从小巧玲珑的

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

Foo有像这样一个构造函数...

public Foo(Bar test, string zebra) 

..和Bar有一个构造函数像这样:

public Bar(int one, int two) 

这不起作用,什么是最好的方法来实现e期望的结果。

+0

'美孚(INT第一,诠释第二,串DERP):这(新的酒吧(一,二),DERP){}' – Will

回答

2

你可以尝试非通用查询API(更多详情请看这里https://stackoverflow.com/a/8995135/229949):

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

不要尝试,如果他们有这样的构造要求,从小巧精致的直接滋润到你的真实模型。相反,水合到一个私人/内部类,然后实例化并返回适当的模型。

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

将这种具有对 '动态' 排液一定的优势,也许性能? –