- 增加 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

@ -364,6 +364,8 @@ namespace base_entity
public string name { get; set; }
[Column(MapType = typeof(string))]
public string JoinTest01Enum { get; set; }
[Column(MapType = typeof(int))]
public JoinTest01Enum JoinTest01Enum2 { get; set; }
[JoinCondition("a.parentcode = b.code")]
public JoinTest01 Parent { get; set; }
@ -394,7 +396,7 @@ namespace base_entity
//.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5")
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=2")
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=2")
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
@ -427,6 +429,12 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion
var result1x = fsql.Ado.QuerySingle(() => new
{
DateTime.Now,
DateTime.UtcNow,
Math.PI
});
Dictionary<string, object> dic = new Dictionary<string, object>();
@ -506,13 +514,13 @@ namespace base_entity
.Replace("a.", e.Tables[a].Alias + ".")
.Replace("b.", parentTable.Alias + ".");
}
e.Result = result;
};
var joinsql1 = fsql.Select<JoinTest01>()
.Include(a => a.Parent.Parent)
.Where(a => a.Parent.Parent.code == "001")
.Where(a => a.JoinTest01Enum == JoinTest01Enum.f3.ToString())
.Where(a => object.Equals(a.JoinTest01Enum, JoinTest01Enum.f3))
.Where(a => new[] { JoinTest01Enum.f2, JoinTest01Enum.f3 }.Contains(a.JoinTest01Enum2))
.ToSql();

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 实例