- 增加 fsql.Ado.QuerySingle(() => new {}) 扩展方法实现无表查询 SELECT now(), utc_timestamp()

This commit is contained in:
2881099
2022-10-10 19:20:35 +08:00
parent b5b820d272
commit 3e5e84f83c
3 changed files with 47 additions and 8 deletions

View File

@ -1228,5 +1228,41 @@ SELECT ");
#endregion
#region Ado.QuerySingle(() => new { DateTime.Now })
public static T1 QuerySingle<T1>(this IAdo ado, Expression<Func<T1>> selector)
{
var nt = SelectNoTable((ado as AdoProvider)?._util._orm, selector);
return nt.Item1.ToListMrPrivate<T1>(nt.Item3, nt.Item2, null).FirstOrDefault();
}
#if net40
#else
async public static Task<T1> QuerySingleAsync<T1>(this IAdo ado, Expression<Func<T1>> selector, CancellationToken cancellationToken = default)
{
var nt = SelectNoTable((ado as AdoProvider)?._util._orm, selector);
var result = await nt.Item1.ToListMrPrivateAsync<T1>(nt.Item3, nt.Item2, null, cancellationToken);
return result.FirstOrDefault();
}
#endif
static NativeTuple<Select1Provider<object>, ReadAnonymousTypeAfInfo, string> SelectNoTable(IFreeSql fsql, Expression selector)
{
var query = fsql.Select<object>() as Select1Provider<object>;
var af = query.GetExpressionField(selector);
var sql = "";
switch (fsql.Ado.DataType)
{
case DataType.Oracle:
case DataType.OdbcOracle:
case DataType.GBase:
sql = $" SELECT {af.field} FROM dual";
break;
case DataType.Firebird:
sql = $" SELECT FIRST 1 {af.field} FROM rdb$database";
break;
default:
sql = $" SELECT {af.field}";
break;
}
return NativeTuple.Create(query, af, sql);
}
#endregion
}

View File

@ -713,11 +713,6 @@
天津南大通用数据技术股份有限公司成立于2004年,是国产数据库、大数据领域的知名企业,基于 Odbc 的实现
</summary>
</member>
<member name="F:FreeSql.DataType.QuestDB">
<summary>
开源时序数据库 QuestDB
</summary>
</member>
<member name="M:FreeSql.AdoNetExtensions.GetIFreeSql(System.Data.IDbConnection)">
<summary>
获取 IDbConnection 对应的 IFreeSql 实例