簡體   English   中英

在 C# & MySQL 中使用 Dapper 進行查詢

[英]Query using Dapper in C# & MySQL

我是 C# 的新手,我正在制作一個小軟件來練習。

我已經構建了一個查詢來獲取最后一個 Dispatch_ID 編號(這不是自動增量)。 我正在使用的代碼是這樣的:

public string GetLastDispatchNum()
    {
        using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("FineCreteDB")))
        {
            var output=connection.Query("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1").Select(x=>x.Dispatch_ID).ElementAt(0);
            return output;
        }
    }

雖然這確實完成了我的工作,但我覺得我在這里沒有正確使用 dapper,這可以更整潔。 查詢“SELECT Dispatch_ID FROM DispatchData ORDER BY Dispatch_ID DESC LIMIT 1”本身只返回一個值和一列。 因此 using.Select(x=>x.Dispatch_ID) &.ElementAt(0) 似乎有點重復。

有沒有更好的方法來 go 關於這個?

我不知道它與其他答案相比是否增加了很多,但在我期望單個值的情況下,我更喜歡QuerySingle 如果結果集中不完全有一項,則會引發異常。

public int GetLastDispatchNum()
{
    using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("FineCreteDB")))
    {
        int output=connection.QuerySingle<int>("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1").Select(x=>x.Dispatch_ID).ElementAt(0);
        return output;
    }
}

它確保了兩件事:

  • 默認值(可能為 null)不會在稍后階段引起問題。
  • 我的數據庫或我的數據庫 model 中的不一致不會被 go 忽視。

就個人而言,我會改用這個:

var output=connection.Query<int>("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1").FirstOrDefault();

不能說它在技術上更好/更快,但對我來說似乎更干凈。

要更新 Dapper 查詢以便您不必使用.ElementAt(0),您可以簡單地寫出 Dapper 代碼,如下所示:

// Assuming that Dispatch_ID is an int
var output = connection.QueryFirst<int>("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1");

此外,如果您想在 Dapper 函數中使用泛型,我建議您使用與您正在檢索的內容相匹配的東西,因此我將其從<DispatchData>更改為<int>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM