Laden...

List Update via Linq

Erstellt von ogre vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.737 Views
O
ogre Themenstarter:in
123 Beiträge seit 2006
vor 9 Jahren
List Update via Linq

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

C
2.121 Beiträge seit 2010
vor 9 Jahren

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.

2.223 Beiträge seit 2005
vor 9 Jahren

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

849 Beiträge seit 2006
vor 9 Jahren

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.

5.941 Beiträge seit 2005
vor 9 Jahren

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

M
2 Beiträge seit 2013
vor 9 Jahren

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ß!

4.931 Beiträge seit 2008
vor 9 Jahren

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;