Hallo,
ich möchte ein Listenelement (Objekt) in einer Liste (lst) via Linq updaten. Das Objekt soll auf den ersten Platz der Liste ID=1 (es soll quasi überschrieben werden)
Ich habe folgendes aufprobiert:
var neu = new Test { Id = "10", Msg = "123456" };
List<Test> lst = new List<Test>();
lst.Add(new Test { Id = "1", Msg = "ww" });
lst.Add(new Test { Id = "2", Msg = "ww" });
var res = lst.Where(p => p.Id == "1");
Test update = res.FirstOrDefault();
update = neu;
.. das Funktioniert aber nicht.
Hat einer von Euch eine bessere Idee.
Danke
Ist das schon Linq? Die Syntax mit var finde ich ziemlich unübersichtlich.
Du machst praktisch folgendes.
List<int> intlist = new ......
int myint = intlist[0];
myint = 5;
Deswegen steht aber in intlist[0] noch lange nicht 5.
Hallo ogre,
Wenn du im Objekt update, einzeln die Properties mit den Werten des neuen setzen würdest, würde es funktionieren.
Warum holst du Dir nicht, den Index des Items löscht das alte heraus und fügst das neue an die gleiche Position wieder hinzu.
Zusätzliche Infos:
dein delegate vom Where kannst du auch sofort im FirstOrDefault angeben.
Du solltest nochmal versuchen dich mit der Thematik Objektreferenzen auseinander zu setzten
Viele Grüße
Lars
Und nur nochmal zum Abschluss, was wir hier gesehen haben sind Lambda Expressions nicht Linq. Linq baut zwar auf Lambda auf, aber das ist trotzdem nochmal eine ganz andere Schreibweise, die eher SQL ähnelt.
Hallo unconnected
Ja, oberflächlich gesehen schon. Allerdings werden die LINQ-Statements intern dann in Methodenaufrufe und Lambda-Expressions gewandelt.
Es sind zwei Schreibweisen aber beides ist LINQ. Hier im speziellen Linq To Objects.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo ogre,
das hier sollte funktionieren:
var neu = new Test { Id = "10", Msg = "123456" };
List<Test> lst = new List<Test>() {
new Test { Id = "1", Msg = "ww" },
new Test { Id = "2", Msg = "ww" }
};
Test update = lst.FirstOrDefault(p => p.Id == "1");
//Kann auch eine lambda-methode übergeben bekommen
update = neu; //Referenz
viel spaß!
Hallo MarcoT,
dein Code ist doch nichts anderes als der von ogre, und demnach falsch.
Richtig wäre:
int index = lst.FindIndex(p => p.Id == "1");
if (index >= 0)
lst[index] = neu;