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条经验 获得超7个赞
实际上,您可以在存储过程中使用表类型,因此在 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 关注
- 103 浏览
添加回答
举报