【发布时间】:2021-11-29 22:51:42
【问题描述】:
我的Action:
[HttpPost]
void Foo(Dictionary<string, object> prm)
{
var sql = "whatever";
var sqlPrms = new List<SqlParameter>();
if (prm.TryGetValue("Condition1",out var c1))
{
sql += " and Condition1=@c1";
sqlPrms.Add(new SqlParameter("c1", c1));
}
if (prm.TryGetValue("Condition2", out var c2))
{
sql += " and Condition2=@c2";
sqlPrms.Add(new SqlParameter("c2", c2));
}
ExecuteSql(sql, sqlPrms);
}
重点是动态条件,我不能定义参数模型类,但是使用Dictionary 问题是Value只能是object,可能会导致获取不正确的数据反序列化时输入,有什么更好的方法?
【问题讨论】:
-
你试图通过哪些不同的对象?
-
@ErmiyaEskandary 不同的action访问不同的数据库表,所以会有不同的查询条件,
Employeeaccept name/sex/department,Storeaccept city/brand...,但是我可以' t 定义具有 Name/Sex 此类属性的EmployeeParameter类,因为用户可能只是按名称查询,而不关心性别,我不能总是在 sql 中编写sex=@xx。不知道我说清楚了没有。 -
不,使用一个类进行验证等,然后使用对象值来构建您的查询 - 只需构建逻辑以不发送性别,例如,如果没有指定
-
@ErmiyaEskandary 问题是
null也是有效值,例如,ReleaseDate 为 null 表示尚未发布,用户可以传递 null 来查询未发布的项目。 -
这更多是关于逻辑的 - 实际问题是什么?
标签: c# dynamic parameter-passing webapi