2012-12-13 62 views
0

直讀第n項這是我在短小精悍博客上發現小巧玲瓏:從GridReader

var sql = 
@" 
select * from Customers where CustomerId = @id 
select * from Orders where CustomerId = @id 
select * from Returns where CustomerId = @id"; 

using (var multi = connection.QueryMultiple(sql, new {id=selectedId})) 
{ 
    var customer = multi.Read<Customer>().Single();  
    var returns = multi.Read<Return>().ToList(); 
    var orders = multi.Read<Order>().ToList(); 
    ... 
} 

我的要求是我想直接只讀「訂單」。我可以這樣做嗎?

回答

2

如果不希望其他兩個,則可以撥打Read而不用遍歷該序列:沒有對象將被物化:

var customer = multi.Read<Customer>(); // not consumed 
var returns = multi.Read<Return>(); // not consumed 
var orders = multi.Read<Order>().ToList(); 
+0

有沒有什麼辦法,我能避免寫第2行 –

+2

@KuntadyNithesh我想我們可以添加某種'跳過()'方法,但目前:沒有。它會如何知道跳過它們?但是,您可以使用非泛型API,即'multi.Read();' –

+0

是的。直接閱讀3。 –

1

您可以使用查詢擴展閱讀單一,例如

const string sql = "select * from Orders where CustomerId = @id"; 
var orders = connection.Query<Order>(sql, new {id = 1}).ToList(); 

編輯:

要執行存儲過程:

var orders = connection.Query<Order>("GetOrders", new {id = 1}, commandType: CommandType.StoredProcedure).ToList(); 
+0

我知道這一點。但我的實際SQL是一個存儲過程 –

+0

我想你的問題不清楚。我也爲SP編輯了我的答案。 –

+0

但我的第一次閱讀是客戶不訂購類型?這是否工作? –