我是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)似乎有点重复。
是否有更好的方法来解决这个问题?
个人,我会改用它:
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>
。
我不知道它与其他答案相比是否增加了很多,但是在我希望使用单个值的情况下,我更喜欢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;
}
}
它确保两件事: