本篇內(nèi)容介紹了“c#中ExpressionVistor的用法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
10年積累的成都做網(wǎng)站、網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有宕昌免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
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> 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返回結(jié)果:" + res); //func2返回結(jié)果:False Console.WriteLine(myvistor.GetSqlString());//select * from [RefClas] where [id] > 5 and [age] < 10
“c#中ExpressionVistor的用法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!