- 增加 WithMemory 基于内存查询;

This commit is contained in:
2881099 2022-08-01 10:06:42 +08:00
parent 991ea968fc
commit 56d744559e
4 changed files with 41 additions and 0 deletions

View File

@ -345,6 +345,25 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value); BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion #endregion
var list = new List<User1>();
list.Add(new User1 { Id = Guid.NewGuid() });
list.Add(new User1 { Id = Guid.NewGuid() });
list.Add(new User1 { Id = Guid.NewGuid() });
var listSql = fsql.Select<User1>()
.WithMemory(list)
.ToSql();
var listSql2 = fsql.Select<UserGroup>()
.FromQuery(fsql.Select<User1>().WithMemory(list))
.InnerJoin((a, b) => a.Id == b.GroupId)
.ToSql();
var listSql2Result = fsql.Select<UserGroup>()
.FromQuery(fsql.Select<User1>().WithMemory(list))
.InnerJoin((a, b) => a.Id == b.GroupId)
.ToList();
var anysql01 = fsql.Select<Permission>().Where(a => a.Roles.Any(b => b.Users.Any(c => c.UserName == "admin"))).ToSql(); var anysql01 = fsql.Select<Permission>().Where(a => a.Roles.Any(b => b.Users.Any(c => c.UserName == "admin"))).ToSql();
var atimpl = fsql.CodeFirst.GetTableByEntity(typeof(AsTableLog)) var atimpl = fsql.CodeFirst.GetTableByEntity(typeof(AsTableLog))

View File

@ -2627,6 +2627,13 @@
<param name="parms">参数</param> <param name="parms">参数</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.ISelect`1.WithMemory(System.Collections.Generic.IEnumerable{`0})">
<summary>
实现 select .. from ( select .. UNION ALL select .. ) a 这样的功能(基于内存数据)
</summary>
<param name="source">内存数据</param>
<returns></returns>
</member>
<member name="M:FreeSql.ISelect`1.WithTempQuery``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})"> <member name="M:FreeSql.ISelect`1.WithTempQuery``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})">
<summary> <summary>
嵌套查询 select * from ( select ... from table ... ) a 嵌套查询 select * from ( select ... from table ... ) a

View File

@ -369,6 +369,12 @@ namespace FreeSql
/// <param name="parms">参数</param> /// <param name="parms">参数</param>
/// <returns></returns> /// <returns></returns>
ISelect<T1> WithSql(string sql, object parms = null); ISelect<T1> WithSql(string sql, object parms = null);
/// <summary>
/// 实现 select .. from ( select .. UNION ALL select .. ) a 这样的功能(基于内存数据)
/// </summary>
/// <param name="source">内存数据</param>
/// <returns></returns>
ISelect<T1> WithMemory(IEnumerable<T1> source);
/// <summary> /// <summary>
/// 嵌套查询 select * from ( select ... from table ... ) a /// 嵌套查询 select * from ( select ... from table ... ) a

View File

@ -437,6 +437,15 @@ namespace FreeSql.Internal.CommonProvider
if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms)); if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms));
return this; return this;
} }
public ISelect<T1> WithMemory(IEnumerable<T1> source)
{
var sb = new StringBuilder();
(_orm.InsertOrUpdate<object>().AsType(_tables[0].Table.Type) as InsertOrUpdateProvider<object>)
.WriteSourceSelectUnionAll(source.Select(a => (object)a).ToList(), sb, _params);
try { return WithSql(sb.ToString()); }
finally { sb.Clear(); }
}
public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<T1, TDto>> selector) => InternalWithTempQuery<TDto>(selector); public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<T1, TDto>> selector) => InternalWithTempQuery<TDto>(selector);