2011-09-06 106 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