- 修复 1.8.0-preview WhereDynamic IN 机制;#431

This commit is contained in:
28810 2020-08-24 10:12:23 +08:00
parent bb089438e2
commit d266446062
4 changed files with 4591 additions and 4476 deletions

View File

@ -51,18 +51,26 @@ namespace base_entity
public CollationTypeEnum val { get; set; } = CollationTypeEnum.Binary;
}
class Sys_reg_user
{
public Guid Id { get; set; }
public Guid OwnerId { get; set; }
public string UnionId { get; set; }
[Navigate(nameof(OwnerId))]
public Sys_owner Owner { get; set; }
}
class Sys_owner
{
public Guid Id { get; set; }
public Guid RegUserId { get; set; }
[Navigate(nameof(RegUserId))]
public Sys_reg_user RegUser { get; set; }
}
static void Main(string[] args)
{
// var result2 = Newtonsoft.Json.JsonConvert.DeserializeObject<TestEnumCls>(@"
//{
// ""val"": ""Binary""
//}");
// var result1 = System.Text.Json.JsonSerializer.Deserialize<TestEnumCls>(@"
//{
// ""val"": ""Binary""
//}");
#region IFreeSql
var fsql = new FreeSql.FreeSqlBuilder()
.UseAutoSyncStructure(true)
@ -99,6 +107,15 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion
var tsql1 = fsql.Select<Sys_reg_user>()
.Include(a => a.Owner)
.Where(a => a.UnionId == "xxx")
.ToSql();
var tsql2 = fsql.Select<Sys_owner>()
.Where(a => a.RegUser.UnionId == "xxx2")
.ToSql();
var names = (fsql.Select<object>() as Select0Provider)._commonUtils.SplitTableName("`Backups.ProductStockBak`");
@ -124,19 +141,22 @@ namespace base_entity
var wdy1 = JsonConvert.DeserializeObject<DynamicFilterInfo>(@"
{
""Logic"" : ""Or"",
""Logic"" : ""And"",
""Filters"" :
[
{
""Field"" : ""title"",
""Operator"" : ""eq"",
""Value"" : ""product-1"",
""Logic"" : ""Or"",
""Filters"" :
[
{
""Field"" : ""title"",
""Operator"" : ""contains"",
""Value"" : ""product-1111"",
},
{
""Field"" : ""title"",
""Operator"" : ""contains"",
""Value"" : ""product-2222"",
}
]
},
@ -212,8 +232,10 @@ namespace base_entity
]
}
", config);
Products.Select.WhereDynamicFilter(wdy1).ToList();
Products.Select.WhereDynamicFilter(wdy2).ToList();
var items1 = Products.Select.Limit(10).OrderByDescending(a => a.CreateTime).ToList();
var items2 = fsql.Select<Products>().Limit(10).OrderByDescending(a => a.CreateTime).ToList();

View File

@ -532,14 +532,5 @@
<param name="that"></param>
<returns></returns>
</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>
</doc>

File diff suppressed because one or more lines are too long

View File

@ -292,9 +292,11 @@ namespace FreeSql.Internal
var ie = dywhere as IEnumerable;
var ieidx = 0;
var isEntityType = false;
var isAny = false;
sb.Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name)).Append(" IN ("); //or会造成扫全表
foreach (var i in ie)
{
isAny = true;
if (ieidx > 0) sb.Append(",");
if (ieidx == 0)
{
@ -305,6 +307,7 @@ namespace FreeSql.Internal
else sb.Append(this.FormatSql("{0}", Utils.GetDataReaderValue(pk1.Attribute.MapType, i)));
++ieidx;
}
if (isAny == false) return "";
sb.Append(")");
return sb.ToString();
}