3 回答

TA貢獻1799條經驗 獲得超9個贊
不。當針對多個輸入發出相同的查詢時,通過傳遞 an作為參數對象, Dapper確實有一個IEnumerable<T>
工具 - 它本質上是在內部展開它,就好像您依次foreach
使用每個項目發出了一個 - 但對于不同的查詢:不,只需將它們一個接一個地發出即可。

TA貢獻1820條經驗 獲得超10個贊
您可以為每個方法創建一個操作,但操作需要具有相同的原型(參數)。一個動作相當于一個指向函數的指針。為了簡單起見,這里我使用 lambda 初始化操作。
一旦你有了一系列的動作,你就可以循環遍歷它并一一調用它們。
var methods = new List<Action<SqlConnection, string>>
{
(connection,databaseName) => DeleteCar(connection, databaseName),
(connection,databaseName) => DeleteHouse(connection, databaseName),
};
SqlConnection myDb;
string dbName;
foreach (var action in methods)
{
action(myDb, dbName);
}
我還可以直接使用方法組初始化數組
var methods = new List<Action<SqlConnection, string>>
{
DeleteCar,
DeleteHouse,
};
不同之處在于,對于方法組,您可以直接給出方法,而對于 lambda,您可以調整參數(例如始終給出相同的 dbName):
string dbName = "toto";
var methods = new List<Action<SqlConnection, string>>
{
(connection) => DeleteCar(connection, dbName),
(connection) => DeleteHouse(connection, dbName),
};
SqlConnection myDb;
foreach (var action in methods)
{
action(myDb);
}

TA貢獻2039條經驗 獲得超8個贊
實際上,您可以在存儲過程中使用表類型,因此在 C# 中您可以創建如下模型:
public class IntIdTableType
{
public int Id { get; set; }
}
然后通過您的連接,您可以執行以下操作:
connection.QueryAsync<myViewModel>("[dbo].[spName]", param: new
{
((List<IntIdTableType>)model.YourIListPropertyModel).ToDataTable(),
}, commandType: CommandType.StoredProcedure);
然后在你的SQL中創建表類型
CREATE TYPE intHelper AS TABLE
(
Id INT
)
最后在您的參數中的存儲過程中:
@MyIdTableType [intHelper] READONLY
詢問:
DELETE FROM dbo.HouseInfo WHERE ParentHouseId IS NULL OR ParentOwnerId IS NULL AND SomeColumn IN (@MyIdTableType)
- 3 回答
- 0 關注
- 150 瀏覽
添加回答
舉報