在C#和MySQL中使用Dapper查询

问题描述 投票:-1回答:3

我是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,这可能会更整洁。查询“从Dispatch_ID排序为DispatchData DESC LIMIT 1的SELECT Dispatch_ID”本身仅返回一个值和一列。因此,使用.Select(x => x.Dispatch_ID)和.ElementAt(0)似乎有点重复。

是否有更好的方法来解决这个问题?

c# mysql winforms dapper
3个回答
0
投票

个人,我会改用它:

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

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


0
投票

为了更新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>


0
投票

我不知道它与其他答案相比是否增加了很多,但是在我希望使用单个值的情况下,我更喜欢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)在以后不会引起问题。
  • 我的数据库或数据库模型中的不一致不会被忽略。
© www.soinside.com 2019 - 2024. All rights reserved.