- 优化 ISelect<T1, T2> 对象 .LeftJoin<T2> 表别名;#1348

This commit is contained in:
2881099 2022-11-25 15:03:13 +08:00
parent 77d2a436d6
commit cc89a6c685
4 changed files with 41 additions and 1 deletions

View File

@ -487,10 +487,38 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value); BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion #endregion
var dkdksql = fsql.Select<User1>().WithLock().From<UserGroup>()
.InnerJoin<UserGroup>((user, usergroup) => user.GroupId == usergroup.Id && usergroup.GroupName == "xxx")
.ToSql();
//Func<string> getName1 = () => "xxx"; //Func<string> getName1 = () => "xxx";
//fsql.GlobalFilter.Apply<User1>("fil1", a => a.Nickname == getName1()); //fsql.GlobalFilter.Apply<User1>("fil1", a => a.Nickname == getName1());
//var gnsql2 = fsql.Select<User1>().ToSql(); //var gnsql2 = fsql.Select<User1>().ToSql();
using (var ctx9 = fsql.CreateDbContext())
{
//var uset = ctx9.Set<UserGroup>();
//var item = new UserGroup
//{
// GroupName = "group1"
//};
//uset.Add(item);
//item.GroupName = "group1_2";
//uset.Update(item);
var uset = ctx9.Set<User1>();
var item = new User1
{
Nickname = "nick1",
Username = "user1"
};
uset.Add(item);
item.Nickname = "nick1_2";
item.Username = "user1_2";
uset.Update(item);
ctx9.SaveChanges();
}
var strs = new string[] { "a", "b", "c" }; var strs = new string[] { "a", "b", "c" };
var strssql1 = fsql.Select<User1>().Where(a => strs.Any(b => b == a.Nickname)).ToSql(); var strssql1 = fsql.Select<User1>().Where(a => strs.Any(b => b == a.Nickname)).ToSql();
var strssql2 = fsql.Select<User1>().Where(a => strs.Any(b => a.Nickname.Contains(b))).ToSql(); var strssql2 = fsql.Select<User1>().Where(a => strs.Any(b => a.Nickname.Contains(b))).ToSql();

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.1;net60</TargetFrameworks> <TargetFrameworks>net60</TargetFrameworks>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<IsPackable>true</IsPackable> <IsPackable>true</IsPackable>
<PackAsTool>true</PackAsTool> <PackAsTool>true</PackAsTool>

View File

@ -800,5 +800,14 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -615,18 +615,21 @@ namespace FreeSql.Internal.CommonProvider
{ {
if (exp == null) return this as TSelect; if (exp == null) return this as TSelect;
_tables[0].Parameter = exp.Parameters[0]; _tables[0].Parameter = exp.Parameters[0];
if (_tables.Count > 1 && _tables[1].Table.Type == typeof(T2)) _tables[1].Parameter = exp.Parameters[1];
return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin);
} }
public TSelect InnerJoin<T2>(Expression<Func<T1, T2, bool>> exp) public TSelect InnerJoin<T2>(Expression<Func<T1, T2, bool>> exp)
{ {
if (exp == null) return this as TSelect; if (exp == null) return this as TSelect;
_tables[0].Parameter = exp.Parameters[0]; _tables[0].Parameter = exp.Parameters[0];
if (_tables.Count > 1 && _tables[1].Table.Type == typeof(T2)) _tables[1].Parameter = exp.Parameters[1];
return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin);
} }
public TSelect RightJoin<T2>(Expression<Func<T1, T2, bool>> exp) public TSelect RightJoin<T2>(Expression<Func<T1, T2, bool>> exp)
{ {
if (exp == null) return this as TSelect; if (exp == null) return this as TSelect;
_tables[0].Parameter = exp.Parameters[0]; _tables[0].Parameter = exp.Parameters[0];
if (_tables.Count > 1 && _tables[1].Table.Type == typeof(T2)) _tables[1].Parameter = exp.Parameters[1];
return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin);
} }