您好,登錄后才能下訂單哦!
本篇內容介紹了“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的用法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。