4 Stimmen

Wie aktualisiere ich Spaltendaten mit einer SQL-Abfrage in Linq?

Ich habe diese Abfrage in SQL und es funktioniert gut:

update userinfo set Interest = 0.98 where userid = 313  

Und ich möchte es in Linq machen, also habe ich Folgendes vorbereitet:

public class TableDataDTO
{
    public string Columnname { get; set; }
    public string Value { get; set; }
    public Type DataType { get; set; }
}  

Implementierung:

TableDataDTO tableData = new TableDataDTO();
tableData.Columnname = "Interest";
tableData.Value = "0.98";

using (dbase instance = new dbase())
{
    string predicate = string.Format("it.UserID=={0} set it.{1}={2}" ,
                313, tableData.Columnname, tableData.Value);

    var uinfo = instance.userinfoes.Where(predicate).FirstOrDefault();

    if (uinfo != null)
    {
        instance.SaveChanges();
        return true;
    }
}  

Aber es gibt mir diesen Fehler:

Der Abfragesyntax ist ungültig. In der Nähe des Schlüsselworts 'SET'  

Ich werde mit verschiedenen Spalten umgehen, also muss ich Linq-Prädikate verwenden, um den Code zu minimieren. Ich mag es nicht, irgendwelche Plugins zu benutzen, um dies zu erreichen. Hoffentlich kann mir jemand helfen.

Bearbeiten

Ich denke, was ich meine ist "Wie aktualisiere ich Daten in Linq mit dynamischem Linq"

Bearbeiten2

Also das ist das wirkliche Szenario. Benutzer/Klienten können ihre Informationen aktualisieren, z.B. Vorname, Nachname, Adresse, Stadt.. etc.. nicht auf einmal, sondern fähig, die Informationen nach und nach zu aktualisieren.
Was bedeutet das? Ok, ich kann eine Methode erstellen, die den Vornamen aktualisieren kann, als nächstes den Nachnamen, die Adresse und so weiter.. Aber wenn ich das tue, wird es viele Codezeilen verbrauchen. Wenn es nur einen Code in Linq gäbe, der das tut, was SQL beim Aktualisieren von Daten tut, dann würde ich nur einen Code benötigen, der den Spaltennamen abruft und seinen Wert setzt. Hoffentlich habe ich es gut erklärt.

Bearbeiten3

Ich habe die Frage von Wie aktualisiere ich Daten in Linq mit Prädikaten? zu Wie aktualisiere ich Spaltendaten mit SQL-Abfrage in Linq? geändert, da ich die eigentliche Bedeutung von Prädikat missverstanden habe.

1voto

McGarnagle Punkte 98711

Ihr Prädikat sollte nur der where Teil der Abfrage sein (ein Prädikat gibt nur true oder false zurück). Versuchen Sie dies:

instance.userinfoes.Where(user => user.userid == 313).First().Interest = 0.98;

0voto

Jason Larke Punkte 4919

Sie können LINQ ähnlich strukturieren wie SQL. Durch eine Kombination von Where und ForEach sollten Sie in der Lage sein, alle benötigten Zeilen zu aktualisieren. Zum Beispiel:

    instance.userinfoes.Where(it => it.UserId == 313).ToList()
                       .ForEach(
                           it => it.Interest = 0.98M
                        );

Es gibt eigentlich keinen Weg, SQL-ähnliche Abfragen als Text zu schreiben und sie an reguläres LINQ zu übergeben, soweit ich weiß.

Weitere Lösungen finden Sie in dieser Frage: Update all objects in a collection using LINQ

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X