Frage

Ich bin Tring ein Feld in einer MySQL-Datenbank mit SubSonic 3 Active zu erhöhen. In SQL ist das, was ich nach:

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

ich folgendes probiert, aber es schien nicht zu Arbeit (messages_received immer zu sein schien 1):

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

Das hat funktioniert:

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);

Also habe ich eine Lösung, aber ich frage mich nur, ob es möglich ist, dies zu tun, ohne zu Ebene SQL zurückgreifen?

Antwort. Als Referenz basierend auf Robs Vorschlag unter ::

_db.Update<person>()
    .SetExpression("messages_received").EqualTo("messages_received+1")
    .Where<person>(x=>x.people_id==idTo)
    .Execute();
War es hilfreich?

Lösung

Sie können das alte Abfrage-Tool für diesen Einsatz und die Verwendung „SetExpression“:

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

Das ist freihändig - aber hoffentlich Sie auf die Idee:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top