【发布时间】:2018-01-25 20:13:53
【问题描述】:
我想公开我的数据库,以便可以对我的控制器进行 POST,然后将其用于构建查询。我正在使用实体框架来构建我的数据上下文。这里的想法是客户端将在 POST 正文中传递 JSON。从那里将使用 JSON 中指定的属性和值构建查询。这里的关键是我不想硬编码值。我希望它以动态方式构建查询,以便对数据上下文所做的任何更改都将直接反映在代码中。
例如我想:
[
{
"NAME":"Random Name"
},
{
"NAME":"Random Name 2",
"STATUS":"ACTIVE"
}
]
翻译成这样的:
var query = FROM d in DataContext
WHERE (x.NAME == "Random NAME 1")
OR (X.NAME == "Random Name 2" AND X.STATUS == "ACTIVE")
请记住,有超过 60 种可能的属性可供选择,并且数据模型可能会发生变化。
我的想法是将JSON解析成一个对象数组,循环遍历每个对象,然后循环遍历该对象的非空属性以动态构建查询。
这是我的带有实际变量的代码。
控制器
public class AgreementsController : ApiController
{
private AgreementRepository agreementRepository;
public AgreementsController()
{
this.agreementRepository = new AgreementRepository();
}
public AGREEMENT[] Post([FromBody]AGREEMENT[] Agreements)
{
return agreementRepository.PostAgreements(Agreements);
}
}
服务
public class AgreementRepository
{
private DataBaseEntities db = new DataBaseEntities();
public AGREEMENT[] PostAgreements(AGREEMENT[] Agreements)
{
List<AGREEMENT> a = new List<AGREEMENT>();
foreach (AGREEMENT agreement in Agreements)
{
/////Loop Through Possible Attributes and then
/////Build queries based off of non null values.
////Append to List and return Agreement[] to controller
}
var agmts = a.ToArray<AGREEMENT>();
return agmts;
}
}
【问题讨论】:
标签: c# json http-post asp.net-web-api2