我正在编写一个内部应用程序,我们让用户可以执行一些不同类型的查询。
该应用程序允许用户通过以下任一键搜索数据库:
蛮力方法是为每种类型的查询简单地创建一个webform,并有一个菜单,用户可以选择要执行的查询类型(这是ASP.NET)
但我想要的是有一个简单的文本框,用户输入查询,然后应用程序应该解析查询并自动选择要发送到后端的查询类型。
例如,employeeId是一个精确格式的数字。所以我可以做一个正则表达式来匹配它。对于status,companyId等也是如此。
所以我的问题是,如果这里的任何人都可以提供一些关于如何最好地编写C#中的方法的建议,该方法将采用字符串并将其与许多不同的正则表达式进行匹配。
干杯, 乔金姆
答案 0 :(得分:1)
直截了当的方法是依次测试每个正则表达式的if
语句序列:
if (Regex.Match(query, regex1)) {
HandleFirstCase(query);
} else if(Regex.Match(query, regex2)) {
HandleSecondCase(query);
} ...
else {
HandleFullTextSearch();
}
更复杂的方法是数据驱动方法,您可以将正则表达式和操作存储在表中并循环遍历它们:
public class RegexAction {
public Regex Pattern { get; private set; }
public Action<string> Handler { get; private set; }
public RegexAction(Regex pattern, Action<string> handler) {
this.Pattern = pattern;
this.Handler = handler;
}
}
public static RegexAction[] HandlerTable = new RegexAction[] {
new RegexAction(regex1, HandleFirstCase),
new RegexAction(regex2, HandleSecondCase),
new RegexAction(regex3, HandleThirdCase),
// ...
}
foreach(RegexAction action in HandlerTable) {
if (action.Match(query)) {
action.Handler(query);
break;
}
}
这有助于将重要数据,模式和操作与测试和调用的实现分开。
答案 1 :(得分:1)
答案 2 :(得分:1)
我要做的只是一个OR查询:
select * from employee where employeeId = search OR name like "%search%" OR status = "search"