Pregunta

Estoy Tring para incrementar un campo en una base de datos MySQL utilizando SubSonic 3 ActiveRecord. En SQL, esto es lo que busco:

UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to;

He intentado lo siguiente, pero no parece funcionar (messages_received siempre parecía estar 1):

_db.Update<person>()
    .Set("messages_received").EqualTo(x => x.messages_received == x.messages_received + 1)
    .Where(x => x.people_id == idTo)
    .Execute();

Este trabajo lo hizo:

string sql="UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to";
var q=new SubSonic.Query.QueryCommand(sql, _db.Provider);
q.AddParameter("id_to", idTo);
q.Provider.ExecuteQuery(q);

Así que tengo una solución, pero me pregunto si es posible hacer esto sin tener que recurrir a SQL sin formato?

respuesta. A modo de referencia, en base a la sugerencia de Rob continuación ::

_db.Update<person>()
    .SetExpression("messages_received").EqualTo("messages_received+1")
    .Where<person>(x=>x.people_id==idTo)
    .Execute();
¿Fue útil?

Solución

Puede utilizar la herramienta de consulta viejo para esto y utilizar "SetExpression":

db.Update("MyTable")
   .SetExpression("messages_received +1")
   .Where("people_id")
   .IsEqualTo(1)
   .Execute();

Eso freehanded - pero espero que usted consigue la idea:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top