简体   繁体   English

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

[英]Query using Dapper in C# & MySQL

I'm new to C# and I'm making a small software to practice.我是 C# 的新手,我正在制作一个小软件来练习。

I've built a query to get the last Dispatch_ID number(which is not Auto-increment).我已经构建了一个查询来获取最后一个 Dispatch_ID 编号(这不是自动增量)。 The code i'm using goes something like this:我正在使用的代码是这样的:

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

Although this does get my job done, I feel I'm not using dapper properly here, and this can be much neater.虽然这确实完成了我的工作,但我觉得我在这里没有正确使用 dapper,这可以更整洁。 The query "SELECT Dispatch_ID FROM DispatchData ORDER BY Dispatch_ID DESC LIMIT 1" itself returns just one value & one column.查询“SELECT Dispatch_ID FROM DispatchData ORDER BY Dispatch_ID DESC LIMIT 1”本身只返回一个值和一列。 Therefore using.Select(x=>x.Dispatch_ID) &.ElementAt(0) seems a bit repetitive.因此 using.Select(x=>x.Dispatch_ID) &.ElementAt(0) 似乎有点重复。

Is there a better way to go about this?有没有更好的方法来 go 关于这个?

I don't know if it adds much compared to the other answers, but I prefer QuerySingle in cases where I expect a single value.我不知道它与其他答案相比是否增加了很多,但在我期望单个值的情况下,我更喜欢QuerySingle It throws an exception if there isn't exactly one item in the result set.如果结果集中不完全有一项,则会引发异常。

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

It ensures two things:它确保了两件事:

  • A default value (maybe null) won't cause problems at a later stage.默认值(可能为 null)不会在稍后阶段引起问题。
  • An inconsistency in my database or my database model won't go unnoticed.我的数据库或我的数据库 model 中的不一致不会被 go 忽视。

Personally, I would use this instead:就个人而言,我会改用这个:

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

Can't say it is technically any better/faster, but seems cleaner to me.不能说它在技术上更好/更快,但对我来说似乎更干净。

To update the Dapper query so you don't have to use.ElementAt(0), you can simply write out the Dapper code like:要更新 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");

Also if you want to use the generic in Dapper functions I would recommend that you use something that matches what you are retrieving, hence why I changed it from <DispatchData> to <int> .此外,如果您想在 Dapper 函数中使用泛型,我建议您使用与您正在检索的内容相匹配的东西,因此我将其从<DispatchData>更改为<int>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM