private IDbCommand AssembleCommand <TFrom, TWhere>(bool isRetrieve, string selectClause, FromExpression <TFrom>?fromCondition, WhereExpression <TWhere>?whereCondition, IList <IDataParameter>?parameters) where TFrom : Entity, new() where TWhere : Entity, new() { IDbCommand command = _databaseEngine.CreateEmptyCommand(); command.CommandType = CommandType.Text; command.CommandText = selectClause; if (isRetrieve) { if (fromCondition == null) { fromCondition = NewFrom <TFrom>(); } command.CommandText += fromCondition.ToString(); foreach (KeyValuePair <string, object> pair in fromCondition.GetParameters()) { IDataParameter param = _databaseEngine.CreateParameter(pair.Key, pair.Value); command.Parameters.Add(param); } } if (whereCondition != null) { command.CommandText += whereCondition.ToString(); foreach (KeyValuePair <string, object> pair in whereCondition.GetParameters()) { IDataParameter param = _databaseEngine.CreateParameter(pair.Key, pair.Value); command.Parameters.Add(param); } } if (parameters != null) { foreach (IDataParameter param in parameters) { command.Parameters.Add(param); } } return(command); }