コード例 #1
0
        public IndexDesigner <TIndex, TEntity> With <TMember>(Expression <Func <TIndex, TMember> > namer, Expression <Func <TEntity, TMember> > projector, params Option[] options)
        {
            var name = ColumnNameBuilder.GetColumnNameByConventionFor(namer);

            designer.With(name, projector, options);
            return(this);
        }
コード例 #2
0
        protected virtual void VisitColumnMethodCall(MethodCallExpression expression)
        {
            switch (expression.Method.Name)
            {
            case "Column":
            {
                var column = ast.Pop() as SqlColumnExpression;     // remove the current column expression
                if (column == null || column.ColumnName != "")
                {
                    throw new NotSupportedException(
                              string.Format("{0} method must be called on the lambda parameter.", expression));
                }

                var constant   = (SqlConstantExpression)ast.Pop();
                var columnType = expression.Method.GetGenericArguments()[0];
                var columnName = (string)constant.Value;

                ast.Push(new SqlColumnExpression(columnType, columnName));
                break;
            }

            case "Index":
            {
                var column = ast.Pop() as SqlColumnExpression;     // remove the current column expression
                if (column == null || column.ColumnName != "")
                {
                    throw new NotSupportedException(
                              string.Format("{0} method must be called on the lambda parameter.", expression));
                }

                var type = expression.Method.GetGenericArguments()[0];

                ast.Push(new SqlColumnPrefixExpression(type.Name));
                break;
            }

            default:
                ast.Pop();
                var name = ColumnNameBuilder.GetColumnNameByConventionFor(expression);
                ast.Push(new SqlColumnExpression(expression.Method.ReturnType, name));
                break;
            }
        }
コード例 #3
0
        protected override Expression VisitMember(MemberExpression expression)
        {
            if (expression.Expression == null)
            {
                ast.Push(new SqlConstantExpression(expression.Member.GetMemberType(), expression.Member.GetValue(null)));
                return(expression);
            }

            Visit(expression.Expression);

            switch (ast.Peek().NodeType)
            {
            case SqlNodeType.Constant:
                var constant = (SqlConstantExpression)ast.Pop();
                if (constant.Value == null)
                {
                    throw new NullReferenceException();
                }

                ast.Push(new SqlConstantExpression(expression.Member.GetMemberType(), expression.Member.GetValue(constant.Value)));
                break;

            case SqlNodeType.ColumnPrefix:
                //TODO: clean up this mess.
                var prefix = (SqlColumnPrefixExpression)ast.Pop();
                ast.Push(new SqlColumnExpression(expression.Member.GetMemberType(), expression.Member.Name));
                break;

            case SqlNodeType.Column:
                ast.Pop();
                var name = ColumnNameBuilder.GetColumnNameByConventionFor(expression);
                ast.Push(new SqlColumnExpression(expression.Member.GetMemberType(), name));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(expression);
        }
コード例 #4
0
ファイル: DocumentDesigner.cs プロジェクト: chessydk/HybridDb
 public DocumentDesigner <TEntity> With <TMember>(Expression <Func <TEntity, TMember> > projector, params Option[] options)
 {
     return(With(ColumnNameBuilder.GetColumnNameByConventionFor(projector), projector, options));
 }