private TranslateResult TranslateWhere(object instance, Type type, List <Parameter> parameters) { bool isFirst = true; TableSchema tableSchema = TableSchemaResolver.GetTableSchema(type); int paramIndex = 0; for (int i = 0, count = tableSchema.FieldsSchema.Count; i < count; i++) { var field = tableSchema.FieldsSchema[i]; if (field.IsPrimaryKey || field.IsUpdCount) { object value = ExpressionFunc.GetPropertyValue(instance, type, field.PropertyInfo); if (value == null) { throw new NotSupportedException(string.Format("The field '{0}' is not supported", field.FieldName)); } if (!isFirst) { clauseBuilder.AppendClause(" And "); } clauseBuilder.AppendClause(field.FieldName); clauseBuilder.AppendClause("="); if (parameters == null) { clauseBuilder.AppendClause(parameterBuilder.GenerateParameterName(), value); } else { clauseBuilder.AppendClause(parameters[paramIndex++].Name, value); } isFirst = false; } } return(new TranslateResult { CommandText = clauseBuilder.GetExpressionText(), // UPDATE ...Where key_column=some_value And UpdCount=some_value // DELETE ...Where key_column=some_value And UpdCount=some_value Parameters = clauseBuilder.GetExpressionParameters(), }); }
internal TranslateResult Translate <T>(Expression <T> expression, ClauseType clauseType) { this.clauseBuilder = new ClauseBuilder(); this.parameterBuilder = new ParameterBuilder(); this.clauseType = clauseType; this.Visit(expression); return(new TranslateResult { CommandText = clauseBuilder.GetExpressionText(), Parameters = clauseBuilder.GetExpressionParameters(), }); }