我正在執行存儲過程,使用QueryMultiple
來返回多組數據。QueryMultiple Result Set Order Changed
var gridReader = db.QueryMultiple("sp",
parameters,
commandType: CommandType.StoredProcedure);
我可以很輕鬆地獲得各組給予我知道訂單,他們會回去。
SELECT * FROM dbo.Set1;
SELECT * FROM dbo.Set2;
SELECT * FROM dbo.Set3;
var set1 = gridReader.Read<Set1>();
var set2 = gridReader.Read<Set2>();
var set3 = gridReader.Read<Set3>();
不過,我在的情況下,他們的順序會回來可能會改變。另一位開發人員可能因爲任何原因決定更改訂單。存儲過程現在變爲:
SELECT * FROM dbo.Set1;
SELECT * FROM dbo.Set3;
SELECT * FROM dbo.Set2;
我該如何處理?
我最初的嘗試是迭代每個網格,檢查列名稱。這似乎起初運作良好,但我無法弄清楚如何將網格投影到課程中,除了手動設置每個字段。我使用Dapper的主要原因是它可以爲我做到這一點。
while (true)
{
var grid = gridReader.Read();
IDictionary<string, object> row = grid.FirstOrDefault();
if (row == null)
break;
if (row.Keys.Contains("Set1_UniqueColumnName"))
{
// Need something like grid.Read<Set1>();
}
else if (row.Keys.Contains("Set2_UniqueColumnName")) { }
else if (row.Keys.Contains("Set3_UniqueColumnName")) { }
}
我的第二個想法是讀每個網格成一個類,檢查類的唯一字段空值/默認值,並試圖在下次上課;如果測試失敗。這顯然不會工作。 .Read()
將返回下一個網格的結果。這個解決方案需要我能夠一遍又一遍地讀取同一個網格。
謝謝你指着我在正確的方向!我想我會需要'GetRowParser',但我無法弄清楚。將它與SqlDataReader結合起來就是個訣竅。 –
不客氣:)幹得好! – davmos