3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
不。當(dāng)針對(duì)多個(gè)輸入發(fā)出相同的查詢時(shí),通過(guò)傳遞 an作為參數(shù)對(duì)象, Dapper確實(shí)有一個(gè)IEnumerable<T>
工具 - 它本質(zhì)上是在內(nèi)部展開(kāi)它,就好像您依次foreach
使用每個(gè)項(xiàng)目發(fā)出了一個(gè) - 但對(duì)于不同的查詢:不,只需將它們一個(gè)接一個(gè)地發(fā)出即可。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
您可以為每個(gè)方法創(chuàng)建一個(gè)操作,但操作需要具有相同的原型(參數(shù))。一個(gè)動(dòng)作相當(dāng)于一個(gè)指向函數(shù)的指針。為了簡(jiǎn)單起見(jiàn),這里我使用 lambda 初始化操作。
一旦你有了一系列的動(dòng)作,你就可以循環(huán)遍歷它并一一調(diào)用它們。
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);
}
我還可以直接使用方法組初始化數(shù)組
var methods = new List<Action<SqlConnection, string>>
{
DeleteCar,
DeleteHouse,
};
不同之處在于,對(duì)于方法組,您可以直接給出方法,而對(duì)于 lambda,您可以調(diào)整參數(shù)(例如始終給出相同的 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貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
實(shí)際上,您可以在存儲(chǔ)過(guò)程中使用表類型,因此在 C# 中您可以創(chuàng)建如下模型:
public class IntIdTableType
{
public int Id { get; set; }
}
然后通過(guò)您的連接,您可以執(zhí)行以下操作:
connection.QueryAsync<myViewModel>("[dbo].[spName]", param: new
{
((List<IntIdTableType>)model.YourIListPropertyModel).ToDataTable(),
}, commandType: CommandType.StoredProcedure);
然后在你的SQL中創(chuàng)建表類型
CREATE TYPE intHelper AS TABLE
(
Id INT
)
最后在您的參數(shù)中的存儲(chǔ)過(guò)程中:
@MyIdTableType [intHelper] READONLY
詢問(wèn):
DELETE FROM dbo.HouseInfo WHERE ParentHouseId IS NULL OR ParentOwnerId IS NULL AND SomeColumn IN (@MyIdTableType)
- 3 回答
- 0 關(guān)注
- 163 瀏覽
添加回答
舉報(bào)