1. Класс
Dictionary<TKey, TValue>
содержит метод
bool TryGetValue(TKey key, out TValue value)
Это уменьшит количество поиска по ключу в кусках кода, подобно:
if (QueryPartsParameters.ContainsKey(part) && QueryPartsParameters[part].Any())
{
QueryPartsParameters[part][0] = param;
}
else
{
QueryPartsParameters.Add(part, new List<AbstractQueryParameter> { param });
}
2. Проперти
protected internal string Method
, что за странный сеттер, что можно вызвать только один раз.
3. Классы лучше размещать в отдельных файлах AbstractColumn, Column, QueryColumn