Beispiel #1
0
        /// <summary>
        /// 构建lamda表达式的语句
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="column"></param>
        /// <returns></returns>
        private string GenerateCode(SearchConditionDto condition, ColumnInfo column)
        {
            var value     = condition.Value;
            var valuePath = $"o.{column.ValuePath}";

            if (column.IsPropertyColumn)
            {
                //自定义属性列的查询
                var dbFuncName = GetDbFunctionName(column.ColumnType);
                valuePath = $"MasterDbContext.{dbFuncName}(o.Property,\"$.{column.ColumnKey}\")";
            }


            if (column.ColumnType != ColumnTypes.Number)
            {
                value = $"\"{value}\"";
            }
            if (column.ColumnType == ColumnTypes.DateTime)
            {
                //日期类型需要转换
                value = $"DateTime.Parse({value})";
            }
            //以.开头的为字符串操作
            if (condition.Operator.StartsWith("."))
            {
                //加括号:a.StartsWith("b")
                value = $"({value})";
            }
            else if (string.IsNullOrEmpty(condition.Value))
            {
                //非字符串操作,如果未传值,作null处理
                value = "null";
            }
            return($"(o)=>{valuePath}{condition.Operator}{value}");
        }
Beispiel #2
0
        private string GenerateLamdaCode <TEntity>(SearchConditionDto condition, ColumnInfo column, out LambdaExpression dbLamda)
        {
            dbLamda = null;

            var value     = condition.Value;
            var valuePath = $"{column.ValuePath}";

            if (column.IsPropertyColumn)
            {
                //自定义属性列的查询
                //var dbFuncName = GetDbFunctionName(column.ColumnType);
                //var p = Expression.Parameter(typeof(TEntity), "x");
                //var _pExp = Expression.Constant($"$.{column.ColumnKey}", typeof(string));
                //MemberExpression member = Expression.PropertyOrField(p, "Property");
                //var expRes = Expression.Call(typeof(TEntity).GetEntityDbContextType().GetMethod(dbFuncName), member, _pExp);
                //dbLamda = Expression.Lambda(expRes, p);

                dbLamda = GeneratePropertyLamda <TEntity>(column.ColumnType, column.ColumnKey);

                //valuePath = $"MasterDbContext.{dbFuncName}(Property,\"$.{column.ColumnKey}\")";
                //基于数据库json字段的查询需要动态构建lamda
                valuePath = "@0(it)";//@0之后会由dbLamda代入
            }


            if (column.ColumnType != ColumnTypes.Number)
            {
                value = $"\"{value}\"";
            }
            if (column.ColumnType == ColumnTypes.DateTime)
            {
                //日期类型需要转换
                value = $"DateTime.Parse({value})";
            }
            //以.开头的为字符串操作
            if (condition.Operator.StartsWith("."))
            {
                //加括号:a.StartsWith("b")
                value = $"({value})";
            }
            else if (string.IsNullOrEmpty(condition.Value))
            {
                //非字符串操作,如果未传值,作null处理
                value = "null";
            }
            return($"{valuePath}{condition.Operator}{value}");
        }