2016-08-08 91 views
0

我在使用HTTP POST請求綁定到asp.net web API的HTML表中創建過濾器,並使用此jquery querybuilder創建過濾器。動態構建來自c#對象的SQL WHERE子句

{ 
"condition": "AND", 
"rules": [ 
    { 
    "id": "price", 
    "field": "price", 
    "type": "double", 
    "input": "text", 
    "operator": "less", 
    "value": "10.25" 
    }, 
    { 
    "condition": "OR", 
    "rules": [ 
     { 
     "id": "category", 
     "field": "category", 
     "type": "integer", 
     "input": "select", 
     "operator": "equal", 
     "value": "2" 
     }, 
     { 
     "id": "category", 
     "field": "category", 
     "type": "integer", 
     "input": "select", 
     "operator": "equal", 
     "value": "1" 
     }] 
    }] 
} 

有沒有什麼辦法可以轉換在此JSON對象,其中使用C#或可在SQL接收HTTP發佈對象和過濾數據的任何其它NuGet包的條件?

C#

public Products GetProductById(object filterObj) 
{ 
    SqlDataReader reader = null; 
    SqlConnection myConnection = new SqlConnection(); 
    myConnection.ConnectionString = @"Server=.\SQLSERVER2008R2;Database=DBCompany;User ID=sa;[email protected];"; 

    SqlCommand sqlCmd = new SqlCommand(); 
    sqlCmd.CommandType = CommandType.Text; 
    sqlCmd.CommandText = "SELECT * FROM MYTABLE WHERE PRICE < 10.25 AND (CATEGORY = 2 OR CATEGORY = 1); 
    sqlCmd.Connection = myConnection; 
    myConnection.Open(); 
    reader = sqlCmd.ExecuteReader(); 
    Products prod = null; 
    while (reader.Read()) 
    { 
     prod = new Products(); 
     prod.Id = Convert.ToInt32(reader.GetValue(0)); 
     prod.Name = reader.GetValue(1).ToString(); 
     prod.CategoryId = Convert.ToInt32(reader.GetValue(2)); 
    } 
    return prod ; 

} 
+0

所有數據都存在,所以可以將其轉換爲SQL查詢。如果你想在c#中做到這一點,你可以創建自己的方法來爲你解碼。 – Neil

+0

你使用的是mvc web api嗎? – InferOn

+0

是的我在後端使用mvc web api和SQL服務器 –

回答

2

您可以使用動態Linq Query Builder

一些例子:我們正在從jQuery的QueryBuilder的傳遞規則,不是從DB

[HttpPost] 
    public ActionResult Applay(FilterRule obj) 
    { 
     var messages = context.messages.BuildQuery(obj).ToList(); 
     return JsonContent(messages); 
    } 

構建查詢和檢索相關數據更新:

obj是已經反序列化JSON與過濾規則(從jQuery的QueryBuilder的) context.messages - 是實體框架的背景下

(DbSet<Message> Messages { get; set; }) 

的一部分,在這種方法中,你是通過LINQ的方式構建SQL查詢和EF其轉換爲SQL 。如果您使用的是ADO.NET,那麼您可以嘗試在git hib項目頁面上查找相關示例。

+0

任何有關SQL服務器的工作示例? –

+0

在我的例子中,我正在使用實體框架和MS SQL –

+0

您可以請分享更多的細節,SQL命令在哪裏,obj包含什麼? –

1

在QueryBuilder的網站,插件部分包括一個可從JavaScript庫發出SQL -

http://querybuilder.js.org/plugins.html

但願幫助,或者你想收到的JSON在C#和手動轉換它(或與NuGet包,雖然我不知道任何)?將SQL子句從客戶端代碼傳遞到服務器執行時可能存在安全問題。

+1

真棒知道一個NuGet包,我認爲他是一個更好的答案:) –

+0

客戶端的這個SQL是不安全的,並暴露了很多東西給最終用戶。所以我想收到JSON並將其轉換爲我的SQL條件。 –