Innerhalb einer Liste einzelne Items mit LINQ Abfrage nach bestimmten Kriterien selektieren. WIE?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RE@OVD.

    Innerhalb einer Liste einzelne Items mit LINQ Abfrage nach bestimmten Kriterien selektieren. WIE?

    Hallo,

    ich entwickle gerade für ein FE-Programm einen Code mit dem ich auf das aktuelle Strukturmodel zugreife möchte und dabei anhand von Spannungen in einzelnen Elementen (die ich aus dem Strukturmodell auslese) die Elementattribute (z.B. Plattendicke) verändern möchte damit sie innerhalb der Grenzspannungen liegen. Im Grunde ist das Vorgehen eine Art von Optimierung.

    Die Elementattribute speichere ich in eine Liste einer eigenen Klasse (siehe folgenden Code):

    Public Plate_Data_List As New List(Of Class_Plate_Attributes) 'Liste in der alle Plate-Element Daten gespeichert sind
    Public Plate_Data_Line As New Class_Plate_Attributes 'Line in der alle Plate-Element Daten gespeichert sind

    Public Class Class_Plate_Attributes
    Public Plate_Number As Integer
    Public Plate_ID As Integer
    Public Plate_Group_Number As Integer
    Public Plate_Group_Name As String
    Public Plate_Property_Number As Integer
    Public Plate_Property_Name As String
    Public Plate_Material_Number As Integer
    Public Plate_Material_Name As String
    Public thkMembrane As Double 'Membrane Thickness
    Public thkBending As Double 'Bending Thickness

    Sub New()
    Plate_Number = 0
    Plate_ID = 0
    Plate_Group_Number = 0
    Plate_Group_Name = ""
    Plate_Property_Number = 0
    Plate_Property_Name = ""
    Plate_Material_Number = 0
    Plate_Material_Name = ""
    thkMembrane = 0
    thkBending = 0
    End Sub

    Um nun flexibel in der Berechnung zu sein, möchte ich vorher selektieren können welche Elemente optimiert werden sollen. Hierfür habe ich die einzelnen Elementattribute (Element Nummer, Gruppen Nummer, etc.) in mehreren CheckedListBoxen zugänglich gemacht, von der aus die zu berechneten Elemente per anklicken der einzelnen Items berücksichtigt werden sollen (siehe folgender Code, aber aus Liste einer anderen Klasse).

    For i = 0 To Plate_Property_Data_List.Count - 1
    CheckedListBox_Select_Plate_Properties.Items.Add(Plate_Property_Data_List.ElementAt(i).Plate_Property_Name)
    CheckedListBox_Select_Plate_Properties.SetItemChecked(i, True)
    Next


    Der Code der die maßgebenden Elemente aus Public Plate_Data_List auslesen soll und in die Liste selected_Plates speichern soll habe ich mir aus dem Internet "zusammengeklaut", aber hier hat sich gezeigt, das ich Ingenieur bin und kein Programmierer.

    Dim Selected_Plates = From Plate_Data_List In Selected_Plates_temp1
    Where CheckedListBox_Select_Plate_Properties.CheckedItems.Contains(Plate_Data_List.Plate_Property_Name) _
    Select Plate_Data_List
    Selected_Plates = Plate_Data_List

    Leider funktioniert das ganze nicht denn es werden immer alle Inhalte in "selected_plates" gespeichert.

    Kann mir jemand helfen?

    MFG
    "Hallo,

    ich entwickle gerade für ein FE-Programm einen Code mit dem ich auf das aktuelle Strukturmodel zugreife möchte und dabei anhand von Spannungen in einzelnen Elementen (die ich aus dem Strukturmodell auslese) die Elementattribute (z.B. Plattendicke) verändern möchte damit sie innerhalb der Grenzspannungen liegen. Im Grunde ist das Vorgehen eine Art von Optimierung.

    Die Elementattribute speichere ich in eine Liste einer eigenen Klasse (siehe folgenden Code):

    VB.NET-Quellcode

    1. Public Plate_Data_List As New List(Of Class_Plate_Attributes) 'Liste in der alle Plate-Element Daten gespeichert sind
    2. Public Plate_Data_Line As New Class_Plate_Attributes 'Line in der alle Plate-Element Daten gespeichert sind
    3. Public Class Class_Plate_Attributes
    4. Public Plate_Number As Integer
    5. Public Plate_ID As Integer
    6. Public Plate_Group_Number As Integer
    7. Public Plate_Group_Name As String
    8. Public Plate_Property_Number As Integer
    9. Public Plate_Property_Name As String
    10. Public Plate_Material_Number As Integer
    11. Public Plate_Material_Name As String
    12. Public thkMembrane As Double 'Membrane Thickness
    13. Public thkBending As Double 'Bending Thickness
    14. Sub New()
    15. Plate_Number = 0
    16. Plate_ID = 0
    17. Plate_Group_Number = 0
    18. Plate_Group_Name = ""
    19. Plate_Property_Number = 0
    20. Plate_Property_Name = ""
    21. Plate_Material_Number = 0
    22. Plate_Material_Name = ""
    23. thkMembrane = 0
    24. thkBending = 0
    25. End Sub


    Um nun flexibel in der Berechnung zu sein, möchte ich vorher selektieren können welche Elemente optimiert werden sollen. Hierfür habe ich die einzelnen Elementattribute (Element Nummer, Gruppen Nummer, etc.) in mehreren CheckedListBoxen zugänglich gemacht, von der aus die zu berechneten Elemente per anklicken der einzelnen Items berücksichtigt werden sollen (siehe folgender Code, aber aus Liste einer anderen Klasse).

    VB.NET-Quellcode

    1. For i = 0 To Plate_Property_Data_List.Count - 1
    2. CheckedListBox_Select_Plate_Properties.Items.Add(Plate_Property_Data_List.ElementAt(i).Plate_Property_Name)
    3. CheckedListBox_Select_Plate_Properties.SetItemChecked(i, True)
    4. Next



    Der Code der die maßgebenden Elemente aus Public Plate_Data_List auslesen soll und in die Liste selected_Plates speichern soll habe ich mir aus dem Internet "zusammengeklaut", aber hier hat sich gezeigt, das ich Ingenieur bin und kein Programmierer.


    VB.NET-Quellcode

    1. Dim Selected_Plates = From Plate_Data_List In Selected_Plates_temp1
    2. Where CheckedListBox_Select_Plate_Properties.CheckedItems.Contains(Plate_Data_List.Plate_Property_Name) _
    3. Select Plate_Data_List
    4. Selected_Plates = Plate_Data_List


    Leider funktioniert das ganze nicht denn es werden immer alle Inhalte in "selected_plates" gespeichert.

    Kann mir jemand helfen?

    MFG"


    Hoffe, so ist es besser, danke. Ich habe mich gerade im Internet weiter erkundigt und ich glaube der Befehl "Join" ist nötig. Allerdings habe ich überhaupt keine Idee wie ich das umsetzen muss. "Join" verarbeit dabei zwei Listen und vergleicht die Schnittmenge bezüglich einer definierten Umgebung. Muss ich dabei die Items innerhalb der checkedlistbox.selecteditems vorher in eine list packen oder geht das auch so? Wie würde ein Beispielcode aussehen?

    MFG
    etwa so

    [vb]

    Public Plate_Data_List As New List(Of Class_Plate_Attributes)
    Public selected_plates As New List(Of Class_Plate_Attributes)

    For Each e As Element In Plate_Data_List
    If CheckedListBox_Select_Plate_Properties.Contains(Plate_Data_List.plate_property_number)
    Then
    selected_plates.Add(e)
    End If
    Next
    [\vb]

    was bedeutet IsOkay in deinem vorgestellten code?

    mfg