mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 UseGenerateCommandParameterWithLambda(true) 时子语句的参数没整合到主语句;#231
- 增加 ISelect.RawJoin 方法以便实现 Outer Apply 查询;#200
This commit is contained in:
parent
e132133e62
commit
c468c65ba5
@ -131,6 +131,11 @@ namespace FreeSql.Tests
|
||||
[Fact]
|
||||
public void Test03()
|
||||
{
|
||||
var itemId = 1;
|
||||
var edi = g.sqlite.Select<Edi>()
|
||||
.Where(a => g.sqlite.Select<EdiItem>().Where(b => b.Id == itemId).Any())
|
||||
.First(a => a); //#231
|
||||
|
||||
var lksdjkg1 = g.sqlite.Select<Edi>()
|
||||
.AsQueryable().Where(a => a.Id > 0).ToList();
|
||||
|
||||
|
@ -83,7 +83,7 @@ public class g
|
||||
// return conn;
|
||||
//})
|
||||
.UseAutoSyncStructure(true)
|
||||
//.UseGenerateCommandParameterWithLambda(true)
|
||||
.UseGenerateCommandParameterWithLambda(true)
|
||||
.UseLazyLoading(true)
|
||||
.UseMonitorCommand(
|
||||
cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前
|
||||
|
@ -1226,6 +1226,14 @@
|
||||
<param name="parms">参数</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelect0`2.RawJoin(System.String)">
|
||||
<summary>
|
||||
在 JOIN 位置插入 SQL 内容<para></para>
|
||||
如:.RawJoin("OUTER APPLY ( select id from t2 ) b")
|
||||
</summary>
|
||||
<param name="sql"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelect0`2.Where(System.String,System.Object)">
|
||||
<summary>
|
||||
原生sql语法条件,Where("id = ?id", new { id = 1 })
|
||||
@ -2953,6 +2961,40 @@
|
||||
<param name="end"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlGlobalExpressionCall.Contains``2(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,``1}},``0,``1)">
|
||||
<summary>
|
||||
C#:从元组集合中查找 exp1, exp2 是否存在<para></para>
|
||||
SQL: <para></para>
|
||||
exp1 = that[0].Item1 and exp2 = that[0].Item2 OR <para></para>
|
||||
exp1 = that[1].Item1 and exp2 = that[1].Item2 OR <para></para>
|
||||
... <para></para>
|
||||
注意:当 that 为 null 或 empty 时,返回 1=0
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<typeparam name="T2"></typeparam>
|
||||
<param name="that"></param>
|
||||
<param name="exp1"></param>
|
||||
<param name="exp2"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlGlobalExpressionCall.Contains``3(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,``1,``2}},``0,``1,``2)">
|
||||
<summary>
|
||||
C#:从元组集合中查找 exp1, exp2, exp2 是否存在<para></para>
|
||||
SQL: <para></para>
|
||||
exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR <para></para>
|
||||
exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR <para></para>
|
||||
... <para></para>
|
||||
注意:当 that 为 null 或 empty 时,返回 1=0
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<typeparam name="T2"></typeparam>
|
||||
<typeparam name="T3"></typeparam>
|
||||
<param name="that"></param>
|
||||
<param name="exp1"></param>
|
||||
<param name="exp2"></param>
|
||||
<param name="exp3"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlGlobalExtensions.Distance(System.Drawing.Point,System.Drawing.Point)">
|
||||
<summary>
|
||||
测量两个经纬度的距离,返回单位:米
|
||||
@ -3217,49 +3259,3 @@
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Œå®Œæˆ<EFBFBD>(å<EFBFBD>¯èƒ½ï¼‰è¢«å…¶ä»–线程事务自动æ<EFBFBD><EFBFBD>交
|
||||
</summary>
|
||||
<param name="handler">事务体 () => {}</param>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Transaction(System.TimeSpan,System.Action)">
|
||||
<summary>
|
||||
å¼€å<E282AC>¯äº‹åŠ¡ï¼ˆä¸<C3A4>支æŒ<C3A6>异æ¥ï¼‰
|
||||
</summary>
|
||||
<param name="timeout">超时,未执行完æˆ<EFBFBD>(å<EFBFBD>¯èƒ½ï¼‰è¢«å…¶ä»–线程事务自动æ<EFBFBD><EFBFBD>交</param>
|
||||
<param name="handler">事务体 () => {}</param>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.TimeSpan,System.Action)">
|
||||
<summary>
|
||||
å¼€å<E282AC>¯äº‹åŠ¡ï¼ˆä¸<C3A4>支æŒ<C3A6>异æ¥ï¼‰
|
||||
</summary>
|
||||
<param name="isolationLevel"></param>
|
||||
<param name="handler">事务体 () => {}</param>
|
||||
<param name="timeout">超时,未执行完æˆ<EFBFBD>(å<EFBFBD>¯èƒ½ï¼‰è¢«å…¶ä»–线程事务自动æ<EFBFBD><EFBFBD>交</param>
|
||||
</member>
|
||||
<member name="P:IFreeSql.Ado">
|
||||
<summary>
|
||||
æ•°æ<C2B0>®åº“访问对象
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.Aop">
|
||||
<summary>
|
||||
所有拦截方法都在这里
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.CodeFirst">
|
||||
<summary>
|
||||
CodeFirst 模å¼<C3A5>å¼€å<E282AC>‘相关方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.DbFirst">
|
||||
<summary>
|
||||
DbFirst 模å¼<C3A5>å¼€å<E282AC>‘相关方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.GlobalFilter">
|
||||
<summary>
|
||||
全局过滤设置,å<C592>¯é»˜è®¤é™„åŠ ä¸º Select/Update/Delete æ<>¡ä»¶
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
@ -226,6 +226,13 @@ namespace FreeSql
|
||||
/// <param name="parms">参数</param>
|
||||
/// <returns></returns>
|
||||
TSelect RightJoin(string sql, object parms = null);
|
||||
/// <summary>
|
||||
/// 在 JOIN 位置插入 SQL 内容<para></para>
|
||||
/// 如:.RawJoin("OUTER APPLY ( select id from t2 ) b")
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <returns></returns>
|
||||
TSelect RawJoin(string sql);
|
||||
|
||||
/// <summary>
|
||||
/// 原生sql语法条件,Where("id = ?id", new { id = 1 })
|
||||
|
@ -808,6 +808,8 @@ namespace FreeSql.Internal
|
||||
if (fsqlType == null) break;
|
||||
if (exp3.Method.Name != "ToList")
|
||||
fsqlType.GetField("_limit", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(fsql, 1);
|
||||
if (tsc.dbParams != null)
|
||||
fsqlType.GetField("_params", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(fsql, tsc.dbParams);
|
||||
fsqltables = fsqlType.GetField("_tables", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(fsql) as List<SelectTableInfo>;
|
||||
//fsqltables[0].Alias = $"{tsc._tables[0].Alias}_{fsqltables[0].Alias}";
|
||||
if (fsqltables != tsc._tables)
|
||||
|
@ -244,6 +244,19 @@ namespace FreeSql.Internal.CommonProvider
|
||||
if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms));
|
||||
return this as TSelect;
|
||||
}
|
||||
public TSelect RightJoin(string sql, object parms = null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sql)) return this as TSelect;
|
||||
_join.Append(" \r\nRIGHT JOIN ").Append(sql);
|
||||
if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms));
|
||||
return this as TSelect;
|
||||
}
|
||||
public TSelect RawJoin(string sql)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sql)) return this as TSelect;
|
||||
_join.Append(" \r\n").Append(sql);
|
||||
return this as TSelect;
|
||||
}
|
||||
|
||||
public TSelect Limit(int limit)
|
||||
{
|
||||
@ -273,14 +286,6 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return this.Limit(pageSize) as TSelect;
|
||||
}
|
||||
|
||||
public TSelect RightJoin(string sql, object parms = null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sql)) return this as TSelect;
|
||||
_join.Append(" \r\nRIGHT JOIN ").Append(sql);
|
||||
if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms));
|
||||
return this as TSelect;
|
||||
}
|
||||
|
||||
public TSelect Skip(int offset)
|
||||
{
|
||||
_skip = offset;
|
||||
|
Loading…
x
Reference in New Issue
Block a user