亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法將簡潔的查詢添加到列表中并執行全部?

有沒有辦法將簡潔的查詢添加到列表中并執行全部?

C#
www說 2023-09-09 17:03:57
我正在使用 Dapper 對數據庫執行查詢。我想知道是否有一種方法可以創建一個包含多個方法的列表,并通過循環它們來執行它們。我包括兩種顯示我正在使用的查詢的方法。我有另一種方法連接到數據庫并在其中調用方法。private void DeleteCar(SqlConnection connection, string databaseName){    Console.WriteLine($@"Starting Delete for CarInfo for {databaseName}");    connection.Query($"DELETE FROM dbo.CarInfo WHERE ParentCarId IS NULL OR ParentDriverId IS NULL");}private void DeleteHouse(SqlConnection connection, string databaseName){    Console.WriteLine($@"Starting Delete for HouseInfo for {databaseName}");    connection.Query($"DELETE FROM dbo.HouseInfo WHERE ParentHouseId IS NULL OR ParentOwnerId IS NULL");}
查看完整描述

3 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

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



查看完整回答
反對 回復 2023-09-09
?
拉莫斯之舞

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);

    }


查看完整回答
反對 回復 2023-09-09
?
largeQ

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)



查看完整回答
反對 回復 2023-09-09
  • 3 回答
  • 0 關注
  • 150 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號