DataTable - einen EAN Code in ArtikelTable suchen, aber nur für bestimmte Lieferanten

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    DataTable - einen EAN Code in ArtikelTable suchen, aber nur für bestimmte Lieferanten

    Ich erweitere gerade meine EAN Suche.
    Bisher übergebe ich meiner EANSuchen Klasse einen EANCode und suche dann in der Artikel DataTable, ob dieser EANCode gefunden wurde:
    Dim Founditem = _Dts.Artikel.FirstOrDefault(Function(z) z.EAN = EANCode)
    Das möchte ich nun erweitern.
    Jeder Artikel hat einen Lieferanten. Ich möchte zusätzlich (optional) noch eine List(of DtsDaten.LieferantRow) an meine EANSuche Klasse übergeben, und dann eben nur die Artikel dieser Lieferanten durchsuchen.
    Dazu habe ich die Public Sub New entsprechend erweitert. Es wird nun eine Optionale List (of) übergeben und wenn deren Count > 0 eine "Lieferanten Filter" Flag auf True gesetzt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub New(EANCode As String, DTS As DtsDaten, Optional ListOfCompaniestoOrder As List(Of DtsDaten.LieferantRow) = Nothing)
    2. _EANCode = EANCode
    3. _Dts = DTS
    4. If ListOfCompaniestoOrder.Count > 0 Then
    5. _ListofCompaniesToOrder = ListOfCompaniestoOrder
    6. _FilterByCompanies = True
    7. End If
    8. End Sub


    Meine Suchsub habe ich auch erweitert:

    VB.NET-Quellcode

    1. Dim Founditem As DtsDaten.ArtikelRow
    2. If _FilterByCompanies Then
    3. Founditem = _Dts.Artikel.FirstOrDefault(Function(z) Boolean.Parse($"LieferantID in ({ String.Join(", ", _ListofCompaniesToOrder.Select(Function(x) x.ID))})") AndAlso z.EAN = EANCode)
    4. Else
    5. Founditem = _Dts.Artikel.FirstOrDefault(Function(z) z.EAN = EANCode)
    6. End If

    Ohne Haltepunkt ausgeführt wird nie ein "Founditem" gefunden. Mit Haltepunkt erhalte ich den Fehler, "Die Zeichenfolge wurde nicht als gültiger Boolean erkannt."
    Wie stelle ich es an, dass nur die Artikel der Lieferanten, welche in ListOfCompaniesToOrder vorkommen, durchsucht werden?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Was erwartest Du von Deinem Boolean.Parse-Ausdruck? Entweder Du wirfst "True" oder "False" rein und bekommst das als Boolean-Wert. Oder Du packst "Roulade mit Klößen" (ich bedien mich mal von RfGs Mittagstisch ;) ) rein und bekommst ne Exception. Denn Dein $"LieferantID in ({ String.Join(", ", _ListofCompaniesToOrder.Select(Function(x) x.ID))})"-Ausdruck ist nicht weiter als ein komplexer Text.

    Du willst wahrscheinlich eher sowas:

    VB.NET-Quellcode

    1. Founditem = _Dts.Artikel.FirstOrDefault(Function(z) _ListofCompaniesToOrder.Select(Function(x) x.ID).Contains(z.LieferantID) AndAlso z.EAN = EANCode)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.