我基本上有一個名爲DynamicServices的泛型類。該dynamicServices將類似於以下從表達式樹C#
class DynamicEntityServices<T>{
T GetById(Guid Id) { // get from db using ado.net dal
List<T> Search(SearchCondition searchCondition) { // filtering the data from the dal
}
現在,我有一個JSON規範文件[基本上是一個JSON模式文件定義的動態實體及其屬性/類型
在運行時,我想消費者我的服務建立併發送給我一個搜索條件。
目前,我有我的執行SQLDAL像下面
class DynamicEntityDAL<T>{
List<T> Search(SearchCondition condition){
StringBuilder query = new StringBuilder();
foreach(var field in condition.Fields){
query.Append(" "+field.Key+" like '%"+field.Value+"%' ")
,並與上述類似的東西,我知道的是,上述過程是正確的,因爲有這個實際的限制。請注意,我想真正得到從搜索條件我的動態服務的主叫用戶發送一個表達式,然後我會構造查詢像下面
var filterExpr = new Expression()...
var paramterExpr = new ParameterExpression("categorystatus",true); // not the right ones, but will look similar to this.
var condition = new SearchCondition{ SearchExpression = filterExpr };
In DAL, I can try to convert the above to SQL using some expression visitor like
`string filterClause = ConvertToSql(condition.SearchExpression);`
我可以讀取和執行的事,但作爲我的json模式文件是動態的,我不能使用EF。請建議正確的方法,以便我的庫可以從服務調用者獲取表達式,並將其轉換爲T-SQL並從數據庫中查詢。
如果您只關心如何從標準Expression Tress生成SQL,那麼[此答案](http://stackoverflow.com/a/7933938/3745022)將對您有用。如果您想知道如何從未指定的JSON創建表達式樹,那麼您應該提供更多詳細信息 - 對於可以手動創建表達式樹的簡單查詢,但是如果您的JSON表示更復雜的事情,那麼這將是一項不重要的任務。 –