C# 在C&MySQL中使用Dapper进行查询

C# 在C&MySQL中使用Dapper进行查询,c#,mysql,winforms,dapper,C#,Mysql,Winforms,Dapper,我是C语言的新手,我正在制作一个小软件来练习 我已经建立了一个查询来获取最后一个不是自动递增的调度ID号。我使用的代码是这样的: public string GetLastDispatchNum() { using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("FineCreteDB"))) { var ou

我是C语言的新手,我正在制作一个小软件来练习

我已经建立了一个查询来获取最后一个不是自动递增的调度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;
        }
    }
虽然这确实完成了我的工作,但我觉得我在这里没有正确地使用整洁,这可能会更整洁。查询SELECT Dispatch_ID FROM Dispatch DATA ORDER BY Dispatch_ID DESC LIMIT 1本身只返回一个值和一列。因此,使用.Selectx=>x.Dispatch\u ID&.ElementAt0似乎有点重复


有更好的方法吗?

就我个人而言,我会用这个来代替:

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

不能说它在技术上更好/更快,但对我来说似乎更干净。

要更新简洁的查询,因此您不必使用。ElementAt0,您只需写出简洁的代码,如下所示:

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

另外,如果您想使用通用的in-Dapper函数,我建议您使用与您正在检索的内容相匹配的内容,因此我将其从更改为。

我不知道与其他答案相比,它是否增加了很多内容,但我更喜欢使用QuerySingle,以防需要单个值。如果结果集中没有一个项目,它将抛出异常

public int GetLastDispatchNum { 使用IDbConnection connection=new MySql.Data.MySqlClient.MySqlConnectionHelper.cnnvalfineCredb { int output=connection.querysingle通过'Dispatch\u ID`DESC LIMIT 1从'Dispatch data'订单中选择'Dispatch\u ID'。Selectx=>x.Dispatch\u ID.ElementAt0; 返回输出; } } 它确保了两件事:

默认值可能为null不会在以后的阶段导致问题。 我的数据库或数据库模型中的不一致不会被忽略。
谢谢,这更干净。并为我澄清了一些关于dapper的事情。当您只是查询单个标量值(结果集第一行的第一列)时,您也可以使用ExecuteScalar。谢谢。我明白这可能不是更快或更好,但我只是不想养成错误编程的习惯。