我公司几乎每个项目都有搜索面板和自定义过滤器。当项目有太多过滤器时,很难创建。
是否有任何好的设计模式可用于创建自定义sql查询以使用过滤器?
我总是这样写:
commandText = "SELECT * FROM XXX "
innerJoinCommand = ""
whereCommand = ""
if (??.length > 0)
whereCommand += "AND ??? "
if (??.Count > 0)
innerJoinCommand += "??? "
//...
if (innerJoinCommand.length > 0)
commandText += innerJoinCommand
if (whereCommand.length > 0)
commandText += "WHERE " + whereCommand
答案 0 :(得分:4)
通常使用Builder Pattern来完成此类事情。
如果你想支持非常复杂的查询,它可能是一个相当复杂的构建器,其他模式可能会发挥作用,但这是我要开始的地方。
答案 1 :(得分:2)
答案 2 :(得分:0)
这是我的方式: (srp是包含所有可能参数的对象)
string query = "select * from TABLE";
if (srp != null)
{
query += " Where ";
bool firstParameter = true;
if (srp.ID!= 0)
{
if (!firstParameter)
{
query += " and ";
}
query += " ID= " + srp.ID.ToString();
firstParameter = false;
}
}
然后你可以根据需要复制内部。
当然,这只适用于AND参数,仍然没有创建更复杂的逻辑来使用或