private SqlFragment CreateUpdateStatement(ObjectAndColumns reg) { SqlFragment query = new SqlFragment("UPDATE " + reg.table + " SET "); // Update fields section for (int i = 0; i < reg.chosenPropsOrFields.Count; i++) { var getter = reg.chosenPropsOrFields.ElementAt(i); if (i == reg.chosenPropsOrFields.Count - 1) { query.AppendText("{0}=", getter.Key) .AppendParameter(getter.Value(reg.obj)); } else { query.AppendText("{0}=", getter.Key) .AppendParameter(getter.Value(reg.obj)) .AppendText(","); } } // WHERE id=? query.AppendText(" WHERE {0}=", reg.idColumn) .AppendParameter(reg.idGetter(reg.obj)); return(query); }
public void Update <T>(string table, Object obj, Expression <Func <T, Object> > idGetterExpr, params Expression <Func <T, Object> >[] getterExprs) { ObjectAndColumns reg = new ObjectAndColumns { table = table, chosenPropsOrFields = new Dictionary <string, GetValue>(getterExprs.Length), idColumn = ExpressionTreeHelper.GetPropOrFieldNameFromLambdaExpr <T>(idGetterExpr), obj = obj }; var tempGetters = CachedTypeData.FetchGettersOf <T>(); // Only add the ones we want foreach (var getterExpr in getterExprs) { string propOrFieldName = ExpressionTreeHelper.GetPropOrFieldNameFromLambdaExpr <T>(getterExpr); reg.chosenPropsOrFields.Add(propOrFieldName, tempGetters[propOrFieldName]); } // Add the id getter reg.idGetter = tempGetters[reg.idColumn]; regs.Add(reg); }