我正在研究由同事編寫的一些表達式樹代碼,並且正在研究添加其他表達式的可能性。它目前支持:equals,not-equals,IsNull等。我需要添加一些可以使用類似於SQL「Like」命令或使用正則表達式的通配符比較。目前代碼解析XML文件並提取數據,然後使用類似於下面顯示的代碼的代碼進行處理。這是「平等」表達的一個例子。 「callExp」是一個基本上保存我的表的字段名稱(Entities)的MemberExpression,GetConstantExpression獲取我正在比較的數據的詳細信息。如何創建表達式樹來執行類似於SQL「Like」命令的操作
xRet = Expression.MakeBinary(ExpressionType.Equal, callExp, GetConstantExpression(element.Element("Value"), callExp.Type));
我所追求的是一種創建類似於「Like」命令的「表達式」的方法。這可以使用類似於上面的幾行來完成,還是會變得更復雜?任何可以幫助這個領域的好資源?
============================================== ====================================
基於反饋的新代碼:
我正在看一些例子,並嘗試了以下內容,希望能爲我創建一個表達式。它給了我下面顯示的錯誤。我是否正確地創建了「StartsWith」表達式? _entityExp是對MyClass的ParameterExpression引用。在類型 'System.String'
ParameterExpression p = Expression.Parameter(_entityExp.Type, "entity");
MethodInfo method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
var containsMethodExp = Expression.Call(p, method, Expression.Constant("root"), p);
方法 '布爾StartsWith(System.String)' 宣佈不能與類型 'MyClass的'
我已決定讓「StartsWith」工作。我編輯了上面的代碼,但是出現錯誤。我是否正在朝着正確的方向前進? – Retrocoder 2010-07-20 15:19:59
@Retrocoder:不,錯誤是非常正確的。你正試圖調用'string.StartsWith(string)',但提供一個非字符串參數。您可以將參數更改爲字符串,也可以使用您需要的簽名編寫自己的「StartsWith」方法。 – 2010-07-20 16:12:22