2011-09-06 78 views
3

我有一个结果集可能看起来像这样的:小巧玲珑点网“没有列名”

ID (no column name) anotherID 
---- ---------------- ---------- 
1  super   3 
1  super   4 
3  duper   6 
4  really   7 
4  really   8 

我有2个问题:

第一:我如何使用短小精悍与一个没有名字的列?

二:我想有一个父子关系,使得我得到每3个对象与例如anotherID的列表:

public class MyObject 
{ 
    public int ID 
    public string Name 
    public int[] Children 
} 
+0

对不起不能命名列...不是我的数据库存储过程 –

+0

参见:http://stackoverflow.com/questions/11703600/dapper-column-number-rather-column-name –

回答

4

好,未命名的列不被短小精悍的支持。我从来没有真正看到他们的理由。

我想我们可以建立支持:

class Foo { [ColumnNumber(1)] public string Name {get;set;} } 

麻烦的是,它引入了查询的一个非常脆弱的方法,我强烈不喜欢,传递指令Query是一样笨重。

但是,如果您乐意改变方式获取结果,您可以解决此问题。

var grid = QueryMultiple(@"set nocount on 
declare @t table(Id int, Name nvarchar(max), AnotherId int) 

insert @t 
exec proc 

set nocount off 
select Id, Name from @t 
select Id, AnotherId from @t 
"); 

然后在这里使用的技术多图:Multi-Mapper to create object hierarchy

+1

也许一个更简洁的方式来做到这一点,将传递一个映射...实质上给列的名称...所以你可以指定它作为一个额外的查询参数,所以你不要混淆数据对象的定义。特别是如果您重复使用数据对象进行多个查询。或者,您也可以允许将名称重新映射到其他名称...... IE ...底层数据(存储过程)会返回一堆您不想在数据对象中使用的匈牙利符号。 –

+0

我与jsobo在同一条船上,我有一个存储过程,我无法控制..但需要使用存储过程与多个无名列以报告应用程序。我试图调整查询,但我得到了SQL错误“INSERT EXEC语句不能嵌套。” 。如果我可以参考能够解决我的问题的列号,如何修改drapper以添加对以下内容的支持: class Foo {[ColumnNumber(1)] public string Name {get; set;}} – studiothat