基本信息
源码名称:基于Lambda的ORM原型
源码大小:0.20M
文件格式:.rar
开发语言:C#
更新时间:2015-08-31
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 1 元 
   源码介绍
一个基于Lambda的ORM原型
内裤啊,没有实例
    public void Resolve(Expression exp)
        {
            if (exp is BinaryExpression)
            {
                var binaryExpr = (BinaryExpression)exp;
                ConvertBinary(binaryExpr);
            }
            else if (exp is MemberExpression)
            {
                var memberExpr = (MemberExpression)exp;
                ConverMember(memberExpr);
            }
            else if (exp is MethodCallExpression)
            {
                var methodExpr = (MethodCallExpression)exp;
                ConvertMethod(methodExpr);

            }
            else if (exp is ConstantExpression)
            {
                var constantExpr = (ConstantExpression)exp;
                ConvertConstant(constantExpr);
            }
        }
        public Object ConvertConstant(ConstantExpression exp)
        {
            builder.Append(exp.Value);
            return exp.Value;
        }
        public void ConvertMethod(MethodCallExpression exp)
        {
            switch (exp.Method.Name)
            {
                case "Equals":
                    {
                        Resolve(exp.Object);
                        builder.Append("=");
                        Resolve(exp.Arguments[0]);
                    }
                    break;
                case "StartsWith":
                    {
                        Resolve(exp.Object);
                        builder.Append("like '");
                        Resolve(exp.Arguments[0]);
                        builder.Append("%'");
                    }
                    break;
                case "EndWith":
                    {
                        Resolve(exp.Object);
                        builder.Append("like '%");
                        Resolve(exp.Arguments[0]);
                        builder.Append("'");
                    }
                    break;
                case "Contains":
                    {
                        Resolve(exp.Object);
                        builder.Append("like '%");
                        Resolve(exp.Arguments[0]);
                        builder.Append("%'");
                    }
                    break;
                case "ToString":
                    {
                        throw new NotSupportedException("Supported Method ToString");
                    }
                    break;
            }
        }
        private void ConverMember(MemberExpression e)
        {
            builder.Append(e.Member.Name);
        }

        private void ConvertBinary(BinaryExpression e)
        {
            Expression left = e.Left;
            Expression right = e.Right;
            switch (e.NodeType)
            {
                case ExpressionType.And:
                    {

                    }
                    break;
                case ExpressionType.Equal:
                    {
                        Resolve(left);
                        builder.Append("=");
                        Resolve(right);
                    }
                    break;
                case ExpressionType.AndAlso:
                    {
                        Resolve(left);
                        builder.Append(" AND ");
                        Resolve(right);
                    }
                    break;
                case ExpressionType.OrElse:
                    {
                        Resolve(left);
                        builder.Append(" OR ");
                        Resolve(right);
                    }
                    break;
                default:
                    { }
                    break;
                    ;

            }
        }