Ejemplo n.º 1
0
        private void Eval(Expression _Expression, ParserArgs _ParserArgs)
        {
            UnaryExpression cast = Expression.Convert(_Expression, typeof(object));
            var             obj  = Expression.Lambda <Func <object> >(cast).Compile().Invoke();

            if (obj == null)
            {
                _ParserArgs.AddParameter(obj);
            }
            else
            {
                var type = obj.GetType();
                if (type.Name == "List`1") //list集合
                {
                    var list  = obj as IEnumerable;
                    var index = 0;
                    foreach (var item in list)
                    {
                        _ParserArgs.AddParameter(item.ToStr());
                        index = _ParserArgs.Builder.Length;
                        _ParserArgs.Builder.Append(",");
                    }
                    _ParserArgs.Builder.Remove(index, 1);
                }
                else
                {
                    _ParserArgs.AddParameter(obj);
                }
            }
        }
Ejemplo n.º 2
0
 public override void Where(MemberExpression expr, ParserArgs args)
 {
     if (expr.Expression is ParameterExpression)
     {
         if (args.TabIsAlias)//在字段上是否加上表的别名
         {
             Parser.Where(expr.Expression, args);
         }
         args.Builder.Append(expr.Member.Name);
         args.Builder.Append(' ');
     }
     else
     {
         object val = Helper.GetValue(expr);
         args.Builder.Append(' ');
         IEnumerator array = val as IEnumerator;
         if (array != null)
         {
             AppendArray(args, array);
         }
         else if (val is Array)//else if (val is IEnumerable)
         {
             AppendArray(args, ((IEnumerable)val).GetEnumerator());
         }
         else
         {
             args.AddParameter(val);
         }
     }
 }
Ejemplo n.º 3
0
        public override void Where(UnaryExpression expr, ParserArgs args)
        {
            //Parser.Where(expr.Operand, args);
            var val = Helper.Eval_1(expr.Operand);

            args.Builder.Append(' ');
            args.AddParameter(val);
        }
Ejemplo n.º 4
0
 /// <summary> 追加可遍历对象(数组或集合或简单迭代器)
 /// </summary>
 private static void AppendArray(ParserArgs args, IEnumerator array)
 {
     if (array.MoveNext())
     {
         args.Builder.Append('(');
         args.AddParameter(array.Current);
         while (array.MoveNext())
         {
             args.Builder.Append(',');
             args.AddParameter(array.Current);
         }
         args.Builder.Append(')');
     }
     else
     {
         args.Builder.Append("NULL");
     }
 }
Ejemplo n.º 5
0
        private void DealNewArrayExpression(NewArrayExpression _Expression, ParserArgs _ParserArgs)
        {
            StringBuilder tmpstr = new StringBuilder();

            foreach (Expression ex in _Expression.Expressions)
            {
                tmpstr.Append("'" + this.Eval(ex) + "'");
                tmpstr.Append(",");
            }
            _ParserArgs.AddParameter(tmpstr.ToString(0, tmpstr.Length - 1));
        }
Ejemplo n.º 6
0
 public override void Where(ConstantExpression expr, ParserArgs args)
 {
     args.Builder.Append(' ');
     args.AddParameter(expr.Value);
 }