mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 增加 WhereDynamicFilter 操作符 Range/Any,实现范围/In查询;
This commit is contained in:
		@@ -125,6 +125,13 @@
 | 
			
		||||
            清空状态数据
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            根据 lambda 条件删除数据
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="predicate"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.DbSet`1.Add(`0)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            添加
 | 
			
		||||
@@ -479,5 +486,14 @@
 | 
			
		||||
            <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>
 | 
			
		||||
 
 | 
			
		||||
@@ -1918,6 +1918,8 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
 | 
			
		||||
            public virtual string ParentCode { get; set; }
 | 
			
		||||
 | 
			
		||||
            public DateTime CreateTime { get; set; }
 | 
			
		||||
 | 
			
		||||
            public int testint { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
        [Table(Name = "D_District", DisableSyncStructure = true)]
 | 
			
		||||
        public class VM_District_Child : BaseDistrict
 | 
			
		||||
@@ -1976,12 +1978,44 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
")).ToSql();
 | 
			
		||||
            Assert.Equal(@"SELECT a.""Code"", a.""Name"", a.""CreateTime"", a.""ParentCode"" 
 | 
			
		||||
            Assert.Equal(@"SELECT a.""Code"", a.""Name"", a.""CreateTime"", a.""testint"", a.""ParentCode"" 
 | 
			
		||||
FROM ""D_District"" a 
 | 
			
		||||
WHERE (((a.""Code"") LIKE '%val1%' AND (a.""Name"") LIKE 'val2%' OR (a.""Name"") LIKE '%val3' OR a.""ParentCode"" = 'val4' OR a.""CreateTime"" >= '2010-10-10 00:00:00'))", sql);
 | 
			
		||||
 | 
			
		||||
            sql = fsql.Select<VM_District_Parent>().WhereDynamicFilter(JsonConvert.DeserializeObject<DynamicFilterInfo>(@"
 | 
			
		||||
{
 | 
			
		||||
  ""Logic"" : ""Or"",
 | 
			
		||||
  ""Filters"" :
 | 
			
		||||
  [
 | 
			
		||||
    {
 | 
			
		||||
      ""Field"" : ""CreateTime"",
 | 
			
		||||
      ""Operator"" : ""Range"",
 | 
			
		||||
      ""Value"" : ""2010-10-10,2010-12-10""
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      ""Field"" : ""Name"",
 | 
			
		||||
      ""Operator"" : ""Any"",
 | 
			
		||||
      ""Value"" : ""val1,val2,val3,val4""
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      ""Field"" : ""testint"",
 | 
			
		||||
      ""Operator"" : ""Range"",
 | 
			
		||||
      ""Value"" : ""100,555""
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      ""Field"" : ""testint"",
 | 
			
		||||
      ""Operator"" : ""Any"",
 | 
			
		||||
      ""Value"" : ""1,5,11,15""
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
")).ToSql();
 | 
			
		||||
            Assert.Equal(@"SELECT a.""Code"", a.""Name"", a.""CreateTime"", a.""testint"", a.""ParentCode"" 
 | 
			
		||||
FROM ""D_District"" a 
 | 
			
		||||
WHERE ((a.""CreateTime"" >= '2010-10-10 00:00:00' AND a.""CreateTime"" < '2010-12-10 00:00:00' OR ((a.""Name"") in ('val1','val2','val3','val4')) OR a.""testint"" >= 100 AND a.""testint"" < 555 OR ((a.""testint"") in (1,5,11,15))))", sql);
 | 
			
		||||
 | 
			
		||||
            sql = fsql.Select<VM_District_Parent>().WhereDynamicFilter(JsonConvert.DeserializeObject<DynamicFilterInfo>(@"
 | 
			
		||||
{
 | 
			
		||||
  ""Logic"" : ""Or"",
 | 
			
		||||
  ""Filters"" :
 | 
			
		||||
  [
 | 
			
		||||
@@ -2035,7 +2069,7 @@ WHERE (((a.""Code"") LIKE '%val1%' AND (a.""Name"") LIKE 'val2%' OR (a.""Name"")
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
")).ToSql();
 | 
			
		||||
            Assert.Equal(@"SELECT a.""Code"", a.""Name"", a.""CreateTime"", a.""ParentCode"", a__Parent.""Code"" as5, a__Parent.""Name"" as6, a__Parent.""CreateTime"" as7, a__Parent.""ParentCode"" as8 
 | 
			
		||||
            Assert.Equal(@"SELECT a.""Code"", a.""Name"", a.""CreateTime"", a.""testint"", a.""ParentCode"", a__Parent.""Code"" as6, a__Parent.""Name"" as7, a__Parent.""CreateTime"" as8, a__Parent.""testint"" as9, a__Parent.""ParentCode"" as10 
 | 
			
		||||
FROM ""D_District"" a 
 | 
			
		||||
LEFT JOIN ""D_District"" a__Parent ON a__Parent.""Code"" = a.""ParentCode"" 
 | 
			
		||||
WHERE ((not((a.""Code"") LIKE '%val1%') AND not((a.""Name"") LIKE 'val2%') OR not((a.""Name"") LIKE '%val3') OR a.""ParentCode"" <> 'val4' OR a__Parent.""Code"" = 'val11' AND (a__Parent.""Name"") LIKE '%val22%' OR a__Parent.""Name"" = 'val33' OR a__Parent.""ParentCode"" = 'val44'))", sql);
 | 
			
		||||
 
 | 
			
		||||
@@ -2411,6 +2411,137 @@
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="readerHander"></param>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="E:FreeSql.IAop.ParseExpression">
 | 
			
		||||
            <summary>
 | 
			
		||||
            可自定义解析表达式
 | 
			
		||||
@@ -2939,9 +3070,22 @@
 | 
			
		||||
            like
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Equal">
 | 
			
		||||
            <summary>
 | 
			
		||||
            =<para></para>
 | 
			
		||||
            Equal/Equals/Eq 效果相同
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Equals">
 | 
			
		||||
            <summary>
 | 
			
		||||
            =
 | 
			
		||||
            =<para></para>
 | 
			
		||||
            Equal/Equals/Eq 效果相同
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Eq">
 | 
			
		||||
            <summary>
 | 
			
		||||
            =<para></para>
 | 
			
		||||
            Equal/Equals/Eq 效果相同
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.Model.DynamicFilterOperator.NotEqual">
 | 
			
		||||
@@ -2969,6 +3113,18 @@
 | 
			
		||||
            <=
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Range">
 | 
			
		||||
            <summary>
 | 
			
		||||
            >= and <<para></para>
 | 
			
		||||
            此时 Value 的值格式为逗号分割:value1,value2
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Any">
 | 
			
		||||
            <summary>
 | 
			
		||||
            in (1,2,3)<para></para>
 | 
			
		||||
            此时 Value 的值格式为逗号分割:value1,value2,value3...
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.Internal.Model.TableRef.RefMiddleEntityType">
 | 
			
		||||
            <summary>
 | 
			
		||||
            中间表,多对多
 | 
			
		||||
@@ -3013,6 +3169,12 @@
 | 
			
		||||
            <param name="timeout">超时</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
 | 
			
		||||
            <summary>
 | 
			
		||||
            获取资源
 | 
			
		||||
            </summary>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            使用完毕后,归还资源
 | 
			
		||||
@@ -3083,6 +3245,12 @@
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="obj">资源对象</param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetAsync(FreeSql.Internal.ObjectPool.Object{`0})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="obj">资源对象</param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            归还对象给对象池的时候触发
 | 
			
		||||
 
 | 
			
		||||
@@ -1029,6 +1029,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
        static MethodInfo MethodStringContains = typeof(string).GetMethod("Contains", new[] { typeof(string) });
 | 
			
		||||
        static MethodInfo MethodStringStartsWith = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
 | 
			
		||||
        static MethodInfo MethodStringEndsWith = typeof(string).GetMethod("EndsWith", new[] { typeof(string) });
 | 
			
		||||
        static ConcurrentDictionary<Type, MethodInfo> MethodEnumerableContainsDic = new ConcurrentDictionary<Type, MethodInfo>();
 | 
			
		||||
        static MethodInfo GetMethodEnumerableContains(Type elementType) => MethodEnumerableContainsDic.GetOrAdd(elementType, et => typeof(Enumerable).GetMethods().Where(a => a.Name == "Contains").FirstOrDefault().MakeGenericMethod(elementType));
 | 
			
		||||
        public TSelect WhereDynamicFilter(DynamicFilterInfo filter)
 | 
			
		||||
        {
 | 
			
		||||
            if (filter == null) return this as TSelect;
 | 
			
		||||
@@ -1089,14 +1091,27 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                        case DynamicFilterOperator.NotStartsWith: exp = Expression.Not(Expression.Call(exp, MethodStringStartsWith, Expression.Constant(fi.Value))); break;
 | 
			
		||||
                        case DynamicFilterOperator.NotEndsWith: exp = Expression.Not(Expression.Call(exp, MethodStringEndsWith, Expression.Constant(fi.Value))); break;
 | 
			
		||||
 | 
			
		||||
                        case DynamicFilterOperator.Eq:
 | 
			
		||||
                        case DynamicFilterOperator.Equals:
 | 
			
		||||
                        case DynamicFilterOperator.Eq: exp = Expression.Equal(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value), exp.Type)); break;
 | 
			
		||||
                        case DynamicFilterOperator.Equal: exp = Expression.Equal(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value), exp.Type)); break;
 | 
			
		||||
                        case DynamicFilterOperator.NotEqual: exp = Expression.NotEqual(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value), exp.Type)); break;
 | 
			
		||||
 | 
			
		||||
                        case DynamicFilterOperator.GreaterThan: exp = Expression.GreaterThan(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value), exp.Type)); break;
 | 
			
		||||
                        case DynamicFilterOperator.GreaterThanOrEqual: exp = Expression.GreaterThanOrEqual(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value), exp.Type)); break;
 | 
			
		||||
                        case DynamicFilterOperator.LessThan: exp = Expression.LessThan(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value), exp.Type)); break;
 | 
			
		||||
                        case DynamicFilterOperator.LessThanOrEqual: exp = Expression.LessThanOrEqual(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value), exp.Type)); break;
 | 
			
		||||
                        case DynamicFilterOperator.Range:
 | 
			
		||||
                            var fiValueRangeArray = fi.Value.Split(',');
 | 
			
		||||
                            if (fiValueRangeArray.Length != 2) throw new ArgumentException($"Range 对应 Value 应该逗号分割,并且长度为 2");
 | 
			
		||||
                            exp = Expression.AndAlso(
 | 
			
		||||
                                Expression.GreaterThanOrEqual(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[0]), exp.Type)),
 | 
			
		||||
                                Expression.LessThan(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[1]), exp.Type))); 
 | 
			
		||||
                            break;
 | 
			
		||||
                        case DynamicFilterOperator.Any:
 | 
			
		||||
                            var fiValueAnyArray = fi.Value.Split(',');
 | 
			
		||||
                            var fiValueAnyArrayType = exp.Type.MakeArrayType();
 | 
			
		||||
                            exp = Expression.Call(GetMethodEnumerableContains(exp.Type), Expression.Constant(Utils.GetDataReaderValue(fiValueAnyArrayType, fiValueAnyArray), fiValueAnyArrayType), exp);
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    var sql = _commonExpression.ExpressionWhereLambda(_tables, exp, null, null, _params);
 | 
			
		||||
 
 | 
			
		||||
@@ -55,9 +55,19 @@ namespace FreeSql.Internal.Model
 | 
			
		||||
        NotEndsWith,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// =
 | 
			
		||||
        /// =<para></para>
 | 
			
		||||
        /// Equal/Equals/Eq 效果相同
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Equal,
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// =<para></para>
 | 
			
		||||
        /// Equal/Equals/Eq 效果相同
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Equals,
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// =<para></para>
 | 
			
		||||
        /// Equal/Equals/Eq 效果相同
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Eq,
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <>
 | 
			
		||||
@@ -80,5 +90,17 @@ namespace FreeSql.Internal.Model
 | 
			
		||||
        /// <=
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        LessThanOrEqual,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// >= and <<para></para>
 | 
			
		||||
        /// 此时 Value 的值格式为逗号分割:value1,value2
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Range,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// in (1,2,3)<para></para>
 | 
			
		||||
        /// 此时 Value 的值格式为逗号分割:value1,value2,value3...
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Any
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user