diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index dcad4573..d076fe36 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -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 dic = new Dictionary(); @@ -506,13 +514,13 @@ namespace base_entity .Replace("a.", e.Tables[a].Alias + ".") .Replace("b.", parentTable.Alias + "."); } - e.Result = result; }; var joinsql1 = fsql.Select() .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(); diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 8d2c97d5..35d5ddd0 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -1228,5 +1228,41 @@ SELECT "); #endregion - + #region Ado.QuerySingle(() => new { DateTime.Now }) + public static T1 QuerySingle(this IAdo ado, Expression> selector) + { + var nt = SelectNoTable((ado as AdoProvider)?._util._orm, selector); + return nt.Item1.ToListMrPrivate(nt.Item3, nt.Item2, null).FirstOrDefault(); + } +#if net40 +#else + async public static Task QuerySingleAsync(this IAdo ado, Expression> selector, CancellationToken cancellationToken = default) + { + var nt = SelectNoTable((ado as AdoProvider)?._util._orm, selector); + var result = await nt.Item1.ToListMrPrivateAsync(nt.Item3, nt.Item2, null, cancellationToken); + return result.FirstOrDefault(); + } +#endif + static NativeTuple, ReadAnonymousTypeAfInfo, string> SelectNoTable(IFreeSql fsql, Expression selector) + { + var query = fsql.Select() as Select1Provider; + 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 } diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 3f6034db..74b1a582 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -713,11 +713,6 @@ 天津南大通用数据技术股份有限公司成立于2004年,是国产数据库、大数据领域的知名企业,基于 Odbc 的实现 - - - 开源时序数据库 QuestDB - - 获取 IDbConnection 对应的 IFreeSql 实例