При отсутствии других ответов я забью свои 2 цента:
Мне кажется, что вы на самом деле создаете новый язык, хотя и очень похожий на уже существующий. Поэтому я подозреваю, что существует множество методов в области интерпретации компьютерного языка, которые могут упростить эту задачу.
Другая вещь, которую следует остерегаться, это случайные (или преднамеренные) проблемы внедрения SQL.
Я не занимался такой задачей, как эта, но если бы я подходил к этому с помощью Regex, у меня возникло бы желание иметь отдельный метод для каждого нового синтаксиса, а затем передать этот вход каждому из методов. Например, вот как я могу обработать синтаксис «Начать с».
public void Main()
{
string input = @"CustomerName Starts With 'J' AND State = 'CA'";
ReplaceStartsWith(ref input);
//...
//ReplaceIncludes(ref input);
Console.WriteLine(input);
//Returns: CustomerName LIKE 'J%' AND State = 'CA'
}
void ReplaceStartsWith(ref string input)
{
input = startsWithRegex.Replace(input, match =>
string.Format("LIKE '{0}%'", match.Groups["literal"]));
}
static RegexOptions commonOptions =
RegexOptions.Compiled |
RegexOptions.ExplicitCapture |
RegexOptions.IgnoreCase |
RegexOptions.IgnorePatternWhitespace |
RegexOptions.Singleline;
static Regex startsWithRegex = new Regex(
@"\bstarts\s+with\s+'(?<literal>[^']*)'"
, commonOptions);