91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c#中ExpressionVistor的用法

發布時間:2021-07-05 17:16:40 來源:億速云 閱讀:332 作者:chen 欄目:編程語言

本篇內容介紹了“c#中ExpressionVistor的用法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

class MyVistor :ExpressionVisitor
        {
            private string tableName;
            private StringBuilder sbSql = new StringBuilder();
            public string getsbSql() { return sbSql.ToString(); }
            private string ExpressionTypeToSQL(ExpressionType type)
            {
                switch(type)
                {
                    case ExpressionType.Add:
                        return " + ";
                    case ExpressionType.And:
                        return " and ";
                    case ExpressionType.AndAlso:
                        return " and ";
                    case ExpressionType.Assign:
                        return " = ";
                    case ExpressionType.NotEqual:
                        return " != ";
                    case ExpressionType.Equal:
                        return " == ";
                    case ExpressionType.GreaterThan:
                        return " > ";
                    case ExpressionType.GreaterThanOrEqual:
                        return " >= ";
                    case ExpressionType.LessThan:
                        return " < ";
                    case ExpressionType.LessThanOrEqual:
                        return " <= ";
                    case ExpressionType.Multiply:
                        return " * ";
                    case ExpressionType.Or:
                    case ExpressionType.OrElse:
                        return " or ";
                    default:
                        return "";
                }
            }
            public override Expression Visit(Expression node)
            {
                return base.Visit(node);
            }
            protected override Expression VisitBinary(BinaryExpression node)
            {
                base.Visit(node.Left);
                sbSql.Append(ExpressionTypeToSQL(node.NodeType));
                base.Visit(node.Right);
                return node;
            }
            public string GetSqlString()
            {
                return "select * from " + tableName + " where " + sbSql.ToString();
            }
            protected override Expression VisitConstant(ConstantExpression node)
            {
                if(node.Type == typeof(int))
                {
                    sbSql.Append(node.Value);//ConstantExpression.Value是表示常量表達式的值
                }
                else
                {
                    sbSql.Append("'" + node.Value + "'");
                }
                return base.VisitConstant(node);
            }
            protected override Expression VisitParameter(ParameterExpression node)
            {
                if(tableName == null)
                {
                    tableName = "[" + node.Type.Name + "]";
                }
                return base.VisitParameter(node);
            }
            protected override Expression VisitMember(MemberExpression node)
            {
                sbSql.Append("[" + node.Member.Name + "]");
                return base.VisitMember(node);
            }
        }
        class RefClas
        {
            public int id;
            public int age;
            public RefClas(int id, int age)
            {
                this.id = id;
                this.age = age;
            }
        }
 Expression<Func<RefClas, bool>> expressionsql = a => a.id > 5 && a.age < 10;
            MyVistor myvistor = new MyVistor();
            Expression exp = myvistor.Visit(expressionsql);
            Console.WriteLine(myvistor.getsbSql());//[id] > 5 and [age] < 10
            //編譯
            var func2 = expressionsql.Compile();
            RefClas cls2 = new RefClas(10,20);
            bool res = func2(cls2);
            Console.WriteLine("func2返回結果:" + res); //func2返回結果:False
            Console.WriteLine(myvistor.GetSqlString());//select * from [RefClas] where [id] > 5 and [age] < 10

“c#中ExpressionVistor的用法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开化县| 剑川县| 桃园县| 彭泽县| 遵义县| 中西区| 龙口市| 邵东县| 张家口市| 平南县| 长岛县| 方正县| 普格县| 加查县| 桃源县| 乌兰浩特市| 苏尼特左旗| 锡林浩特市| 繁峙县| 丹凤县| 镇原县| 利辛县| 孟连| 安仁县| 长兴县| 阳曲县| 阜平县| 阿鲁科尔沁旗| 横峰县| 镇赉县| 定南县| 化隆| 万山特区| 清水河县| 临朐县| 江西省| 晋宁县| 瑞昌市| 恩施市| 正宁县| 杭州市|