我正在使用HTTP POST请求在我的HTML表格中使用asp.net web API创建过滤器,并使用此jquery querybuilder创建过滤器。
{
"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"
}]
}]
}
有没有办法可以在使用C#的条件或任何其他可以接收HTTP post对象并在SQL中过滤数据的nuget包中转换这个JSON对象?
C#
public Products GetProductById(object filterObj)
{
SqlDataReader reader = null;
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = @"Server=.\SQLSERVER2008R2;Database=DBCompany;User ID=sa;Password=xyz@1234;";
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 :(得分: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项目页面上找到相关示例。
答案 1 :(得分:1)
在QueryBuilder站点上,插件部分包含一个可以从JavaScript库中发出SQL的部分 -
http://querybuilder.js.org/plugins.html
是否有帮助或者你想在c#中接收json并手动翻译(或者使用NuGet包,但我不知道)?将SQL子句从客户端代码传递到服务器以执行可能存在安全问题。