diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs index 56855659..de93f269 100644 --- a/FreeSql/Interface/IAdo.cs +++ b/FreeSql/Interface/IAdo.cs @@ -215,6 +215,7 @@ namespace FreeSql List Query(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms); List Query(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, params DbParameter[] cmdParms); List Query(Type resultType, DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, params DbParameter[] cmdParms); + T QuerySingle(CommandType cmdType, string cmdText, params DbParameter[] cmdParms); /// /// 执行SQL返回对象集合,Query<User>("select * from user where age > ?age", new { age = 25 }) /// 提示:parms 参数还可以传 Dictionary<string, object> @@ -226,6 +227,7 @@ namespace FreeSql List Query(string cmdText, object parms = null); List Query(DbTransaction transaction, string cmdText, object parms = null); List Query(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null); + T QuerySingle(string cmdText, object parms = null); /// /// 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) @@ -425,6 +427,7 @@ namespace FreeSql Task> QueryAsync(DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default); Task> QueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, DbParameter[] cmdParms, CancellationToken cancellationToken = default); Task> QueryAsync(Type resultType, DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, DbParameter[] cmdParms, CancellationToken cancellationToken = default); + Task QuerySingleAsync(string cmdText, object parms = null, CancellationToken cancellationToken = default); /// /// 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 }) /// 提示:parms 参数还可以传 Dictionary<string, object> @@ -437,6 +440,7 @@ namespace FreeSql Task> QueryAsync(string cmdText, object parms = null, CancellationToken cancellationToken = default); Task> QueryAsync(DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default); Task> QueryAsync(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default); + Task QuerySingleAsync(CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default); /// /// 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 7cbcfb9e..3ed9be74 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -125,6 +125,8 @@ namespace FreeSql.Internal.CommonProvider } } + public T QuerySingle(string cmdText, object parms = null) => Query(cmdText, parms).FirstOrDefault(); + public T QuerySingle(CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => Query(cmdType, cmdText, cmdParms).FirstOrDefault(); public List Query(string cmdText, object parms = null) => Query(null, null, null, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms)); public List Query(DbTransaction transaction, string cmdText, object parms = null) => Query(null, null, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms)); public List Query(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => Query(null, connection, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms)); diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs index cc9a3d05..8421208a 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs @@ -40,6 +40,8 @@ namespace FreeSql.Internal.CommonProvider } } + async public Task QuerySingleAsync(string cmdText, object parms = null, CancellationToken cancellationToken = default) => (await QueryAsync(cmdText, parms, cancellationToken)).FirstOrDefault(); + async public Task QuerySingleAsync(CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default) => (await QueryAsync(cmdType, cmdText, cmdParms, cancellationToken)).FirstOrDefault(); public Task> QueryAsync(string cmdText, object parms = null, CancellationToken cancellationToken = default) => QueryAsync(null, null, null, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms), cancellationToken); public Task> QueryAsync(DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default) => QueryAsync(null, null, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms), cancellationToken); public Task> QueryAsync(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default) => QueryAsync(null, connection, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms), cancellationToken); diff --git a/FreeSql/Internal/Model/AdoCommandFluent.cs b/FreeSql/Internal/Model/AdoCommandFluent.cs index 322f4e47..3fc66659 100644 --- a/FreeSql/Internal/Model/AdoCommandFluent.cs +++ b/FreeSql/Internal/Model/AdoCommandFluent.cs @@ -92,6 +92,7 @@ namespace FreeSql.Internal.Model public DataSet ExecuteDataSet() => this.Ado.ExecuteDataSet(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); public object[][] ExecuteArray() => this.Ado.ExecuteArray(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); public List Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public T QuerySingle() => Query().FirstOrDefault(); public NativeTuple, List> Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); public NativeTuple, List, List> Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); public NativeTuple, List, List, List> Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); @@ -105,6 +106,7 @@ namespace FreeSql.Internal.Model public Task ExecuteDataSetAsync(CancellationToken cancellationToken = default) => this.Ado.ExecuteDataSetAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray(), cancellationToken); public Task ExecuteArrayAsync(CancellationToken cancellationToken = default) => this.Ado.ExecuteArrayAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray(), cancellationToken); public Task> QueryAsync(CancellationToken cancellationToken = default) => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray(), cancellationToken); + async public Task QuerySingleAsync(CancellationToken cancellationToken = default) => (await QueryAsync(cancellationToken)).FirstOrDefault(); public Task, List>> QueryAsync(CancellationToken cancellationToken = default) => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray(), cancellationToken); public Task, List, List>> QueryAsync(CancellationToken cancellationToken = default) => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray(), cancellationToken); public Task, List, List, List>> QueryAsync(CancellationToken cancellationToken = default) => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray(), cancellationToken);