Benutzer mit den meisten Antworten
LINQ To Oject

Frage
-
Hallo Leute,
wie kann ich mittels LINQ ein Update-Command auf eine Collection(Of T) anwenden?
Dim ColMeineKlasse As New Collection(Of cMeineKlasse)
Mit dem 'gewöhnlichem' SQL auf eine Tabelle geht es so:
"UPDATE ColMeineKlasse SET Wert = 12345"Wie geht dies aber mit LINQ?
Vielen Dank im Voraus
Christian Tauschek
Christian Tauschek
Antworten
-
Ich habe es versucht über die Select-Methode zu lösen. Hier nochmal andere Versionen mit dem kompletten Testcode:
Option Strict On Imports System.Collections.ObjectModel Module Module1 Sub Main() Dim list As New Collection(Of TestClass) list.Add(New TestClass() With {.Name = "1", .Number = 1}) list.Add(New TestClass() With {.Name = "11", .Number = 2}) list.Add(New TestClass() With {.Name = "123", .Number = 3}) list.Add(New TestClass() With {.Name = "1234", .Number = 4}) list.Add(New TestClass() With {.Name = "12345", .Number = 5}) list.Add(New TestClass() With {.Name = "123456", .Number = 6}) 'Version 1' list = New Collection(Of TestClass)(list.Select(Function(x) x.Name = "" ' Einfach einen leeren String zuweisen' Return x ' Element wieder zurück geben' End Function).ToList()) Debugger.Break() 'Version 2' list = New Collection(Of TestClass)(list.Select(Function(x) SelectItem(x)).ToList()) Debugger.Break() 'Version 3' list = New Collection(Of TestClass)((From x In list Select SelectItem(x)).ToList()) Debugger.Break() End End Sub Function SelectItem(x As TestClass) As TestClass x.Name = "" ' Einfach einen leeren String zuweisen' Return x ' Element wieder zurück geben' End Function End Module Class TestClass Public Property Name As String Public Property Number As Integer End Class
Funktionieren müssten sie alle. Bei mir tun sie es auch. Beim Ausführen kannst du immer beim Anhalten des Debuggers die Liste überprüfen.
Probiere den Code am besten nochmal in einem neuen Projekt aus. Falls es an einer Projekteinstellung o.ä. liegt.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Christian Tauschek Freitag, 4. Oktober 2013 15:10
Alle Antworten
-
Hallo,
ich bin kein SQL Profi, aber soweit ich UPDATE...SET kenne, werden damit die Werte einer gesamten Spalte verändert.In LINQ kann man so etwas mittels Select lösen:
Dim list As New Collection(Of TestClass) list.Add(New TestClass() With {.Name = "1", .Number = 1}) list.Add(New TestClass() With {.Name = "11", .Number = 2}) list.Add(New TestClass() With {.Name = "123", .Number = 3}) list.Add(New TestClass() With {.Name = "1234", .Number = 4}) list.Add(New TestClass() With {.Name = "12345", .Number = 5}) list.Add(New TestClass() With {.Name = "123456", .Number = 6}) list = New Collection(Of TestClass)(list.Select(Function(x) x.Name = "" ' Einfach einen leeren String zuweisen' Return x ' Element wieder zurück geben' End Function).ToList())
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.
- Bearbeitet Tom Lambert (Koopakiller)Moderator Donnerstag, 3. Oktober 2013 09:58 Snippet
-
Hallo Tom,
ich habe dein Beispiel getestet aber es scheint bei mir einfach nicht zu funktionieren.
IntelliSense markiert mir das 'Return' im untenstehenden Ausdruck mit der Meldung, dass an dieser Stelle eine ')' erwartet wird.
Ist es möglich, dass diese Syntax mit Framework 3.5 (VS2008) so nicht funktioniert?list = New Collection(Of TestClass)(list.Select(Function(x) x.Name = "" Return x End Function).ToList())
mfg
ChristianChristian Tauschek
-
Bei mir funktioniert es unter .NET 3.5. Wenn ich deine Codezeile bei mir einfüge erhalte ich aber den selben Fehler, da der Compiler (und IntelliSense auch) erwartet das die Function mehrzeilig dargestellt wird.
Einzeilg geht es bei einfachen Ausdrücken wie:
list.Select(Function(x) x)
Es wird x übergeben und x zurück gegeben. Sobald es aber mehrzeilg wird, muss es so aussehen:list.Select(Function(x) 'Mache was mit x Return x End Function)
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke. -
Hallo Tom,
ich weiß nicht warum aber es mag bei mir einfach nicht funktionieren - auch nicht in mehrzeiliger Schreibweise.
Andererseits ist der untenstehende Code wiederum kein Problem
mfg
Christian
Dim Result2 = From AL In colArtikelEintragLieferschein _ Group AL By AL.ArtikelEintrag.Artikel.Matchcode Into Group Order By Group.First.ArtikelEintrag.Artikel.Matchcode Ascending _ Select New With { _ .Artikel = Group.First.ArtikelEintrag.Artikel, _ .GesamtmengeAllerLieferscheine = Group.Where(Function(x) x.Lieferschein.Typ = eNCCLieferscheinTyp.Lieferschein).Sum(Function(x) x.ArtikelEintrag.Menge), _ .GesamtmengeAllerRetourscheine = Group.Where(Function(x) x.Lieferschein.Typ = eNCCLieferscheinTyp.Retourschein).Sum(Function(x) x.ArtikelEintrag.Menge) _ }
Christian Tauschek
-
Ich habe es versucht über die Select-Methode zu lösen. Hier nochmal andere Versionen mit dem kompletten Testcode:
Option Strict On Imports System.Collections.ObjectModel Module Module1 Sub Main() Dim list As New Collection(Of TestClass) list.Add(New TestClass() With {.Name = "1", .Number = 1}) list.Add(New TestClass() With {.Name = "11", .Number = 2}) list.Add(New TestClass() With {.Name = "123", .Number = 3}) list.Add(New TestClass() With {.Name = "1234", .Number = 4}) list.Add(New TestClass() With {.Name = "12345", .Number = 5}) list.Add(New TestClass() With {.Name = "123456", .Number = 6}) 'Version 1' list = New Collection(Of TestClass)(list.Select(Function(x) x.Name = "" ' Einfach einen leeren String zuweisen' Return x ' Element wieder zurück geben' End Function).ToList()) Debugger.Break() 'Version 2' list = New Collection(Of TestClass)(list.Select(Function(x) SelectItem(x)).ToList()) Debugger.Break() 'Version 3' list = New Collection(Of TestClass)((From x In list Select SelectItem(x)).ToList()) Debugger.Break() End End Sub Function SelectItem(x As TestClass) As TestClass x.Name = "" ' Einfach einen leeren String zuweisen' Return x ' Element wieder zurück geben' End Function End Module Class TestClass Public Property Name As String Public Property Number As Integer End Class
Funktionieren müssten sie alle. Bei mir tun sie es auch. Beim Ausführen kannst du immer beim Anhalten des Debuggers die Liste überprüfen.
Probiere den Code am besten nochmal in einem neuen Projekt aus. Falls es an einer Projekteinstellung o.ä. liegt.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Christian Tauschek Freitag, 4. Oktober 2013 15:10