您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“c#中ExpressionVistor的用法”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
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是表示常量表達(dá)式的值 } 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返回結(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)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。