public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { var name = binder.Name.Replace("Upsert", string.Empty); var collapsed = args[0].Collapse(); var whereCondition = binder.ToWhereStatement(); if (binder.Name.EndsWith("Upsert")) { var insert = collapsed.ToInsertStatement(name); var update = collapsed.ToUpdateStatement(name); var query = string.Format(UpsertQuery, name, whereCondition, update, insert); result = ExecuteQuery(query, collapsed.Values.ToArray()); } else { var query = string.Format(SelectQuery,name, whereCondition); result = Read(query, collapsed.Values.ToArray()); } return true; }