- 修复 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; 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) 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 #region IFreeSql
var fsql = new FreeSql.FreeSqlBuilder() var fsql = new FreeSql.FreeSqlBuilder()
.UseAutoSyncStructure(true) .UseAutoSyncStructure(true)
@ -99,6 +107,15 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value); BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion #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`"); var names = (fsql.Select<object>() as Select0Provider)._commonUtils.SplitTableName("`Backups.ProductStockBak`");
@ -124,19 +141,22 @@ namespace base_entity
var wdy1 = JsonConvert.DeserializeObject<DynamicFilterInfo>(@" var wdy1 = JsonConvert.DeserializeObject<DynamicFilterInfo>(@"
{ {
""Logic"" : ""Or"", ""Logic"" : ""And"",
""Filters"" : ""Filters"" :
[ [
{ {
""Field"" : ""title"", ""Logic"" : ""Or"",
""Operator"" : ""eq"",
""Value"" : ""product-1"",
""Filters"" : ""Filters"" :
[ [
{ {
""Field"" : ""title"", ""Field"" : ""title"",
""Operator"" : ""contains"", ""Operator"" : ""contains"",
""Value"" : ""product-1111"", ""Value"" : ""product-1111"",
},
{
""Field"" : ""title"",
""Operator"" : ""contains"",
""Value"" : ""product-2222"",
} }
] ]
}, },
@ -212,8 +232,10 @@ namespace base_entity
] ]
} }
", config); ", config);
Products.Select.WhereDynamicFilter(wdy1).ToList();
Products.Select.WhereDynamicFilter(wdy2).ToList(); Products.Select.WhereDynamicFilter(wdy2).ToList();
var items1 = Products.Select.Limit(10).OrderByDescending(a => a.CreateTime).ToList(); var items1 = Products.Select.Limit(10).OrderByDescending(a => a.CreateTime).ToList();
var items2 = fsql.Select<Products>().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> <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>

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