static Expression <Func <T, bool> > Custom_Expression_Common <T>(ExpressionEventHandler handler, string columnNames, params object[] values)
        {
            BinaryExpression filter = Expression.Equal(Expression.Constant(1), Expression.Constant(1));

            var columns = columnNames.Split(',');
            var param   = Expression.Parameter(typeof(T));

            for (int i = 0; i < columns.Length; i++)
            {
                if (values[i] == null)
                {
                    continue;
                }
                string     columnName = columns[i].ToString();
                var        value      = values[i];
                Expression left       = Expression.Property(param, typeof(T).GetProperty(columnName));
                Expression right      = Expression.Constant(value, value.GetType());
                Expression result     = handler(left, right);
                filter = Expression.And(filter, result);
            }
            return(Expression.Lambda <Func <T, bool> >(filter, param));
        }
 public BaseObserver(Control ctrl)
 {
     this.ExpressionChangedEvent += new ExpressionEventHandler(Observer_ExpressionChangedEvent);
     this._ctrl = ctrl;
 }