vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Vergleichsoperatoren im LINQ-Ausdruck 
Autor: Josch54
Datum: 24.10.14 08:58

Hallo zusammen,

ich habe einen Filter für mein Datagridview geschrieben und will nun über eine Combobox einen Vergleichsoperator ( zB. like) als Variable in meinen LINQ-Ausdruck einfügen.
Meine Frage: geht das überhaupt?
Hier der Code
                    Dim query =
                               From order In quyGeb _
                     Where (order("Budgetjahr").ToString.StartsWith( _
                     tbxFilterBudgetjahr.Text) _
                    AndAlso order("Gebäudenummer").ToString.StartsWith( _
                    tbxFilterGebäude.Text) _
                    AndAlso order("Projektnummer").ToString.ToUpper.Contains( _
                    UCase(tbxFilterProjektNummer.Text)) _
                    AndAlso order("Projekttyp").ToString.ToUpper.Contains(UCase( _
                    tbxFilterProjekttyp.Text)) _
                    AndAlso order( _
                    "Projektkategorie").ToString.ToUpper.StartsWith(UCase( _
                    tbxFilterKategorie.Text)) _
                    AndAlso order("Status").ToString & VERGLEICHSVARIABLE _
                    der Combobox & tbxFilterProjektstatus.Text _
                    AndAlso order( _
                    "Projektbezeichnung").ToString.ToUpper.Contains(UCase( _
                    tbxFilterBezeichnung.Text)) _
                    AndAlso order("Projektleiter").ToString.ToUpper.Contains( _
                    UCase(tbxFilterPLeiter.Text)) _
                    AndAlso order("Projektkostenstelle") IsNot DBNull.Value _
                    AndAlso CStr(order("Projektkostenstelle")).Contains( _
                    tbxFilterKostenstelle.Text) _
                    AndAlso order("Anlagedatum") >= dtpFilterBeginn.Value _
                    AndAlso order("Projektende") <= dtpFilterEnde.Value)
 
 
 
                    If query.Count > 0 Then
                        dgvProjektübersicht2.DataSource = Nothing
                        dgvProjektübersicht2.DataSource = query.CopyToDataTable
                    Else
                        dgvProjektübersicht2.DataSource = Nothing
                    End If
 
            End Select
Vielen Dank im Voraus!

Grüße Josch
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Vergleichsoperatoren im LINQ-Ausdruck 
Autor: Manfred X
Datum: 25.10.14 23:20

Verwende zum Filtern der Datensätze eine BindingSource.
Deren Filter-Eigenschaft wird durch einen String zusammengesetzt.

Auf DBNull.Value fragt man mit der IsDBNull-Methode ab.

Nutze am besten entweder Methoden der VB-Laufzeitbibliothek (Ucase)
oder Framework-Methoden (ToUpper).

Es dürfte für den User schwierig sein, eine Auswahl zu treffen, wenn
StartsWith und Contains in den Filterbedingungen gemischt werden.







Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Vergleichsoperatoren im LINQ-Ausdruck 
Autor: Christoph1972
Datum: 26.10.14 21:29

Hi,

mit LINQ kannst du nur die Conatins Methode als LIKE Operator verwenden. Starts- und EndsWidth natürlich auch.

In deinem Query verwendest du sehr häufig contains. Ich denke damit liegst du etaws falsch.

z.B.

AndAlso order("Projektnummer").ToString.ToUpper.Contains(UCase(tbxFilterProjektNummer.Text))

Angenommen die ProjektNummer wäre 456.

dann wäre 456 ein Treffer, aber auch 12456, 13456, 1456999, 456999 usw.

Gruß
Christoph



Beitrag wurde zuletzt am 26.10.14 um 21:30:54 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Vergleichsoperatoren im LINQ-Ausdruck 
Autor: Josch54
Datum: 07.11.14 13:38

Hallo zusammen,

sorry für die späte Antwort.
Ich habe das Ganze wieder umgestrickt auf ein Dataview.
Hier kann man ja den RowFilter dementsprechend zusammenbauen.

Dim dv As DataView = New DataView(query.CopyToDataTable)
 
dv.RowFilter = "Isnull(Budgetjahr, '') LIKE '*" & tbxFilterBudgetjahr.Text & _
  "*'" _
             & " AND Gebäudenummer LIKE '%" & tbxFilterGebäude.Text & "'" _
             & " AND Projektnummer LIKE '%" & tbxFilterProjektNummer.Text & _
             "%'" _
             & " AND Projektbezeichnung LIKE '%" & tbxFilterBezeichnung.Text & _
             "%'" _
             & " AND Convert([Projektkostenstelle], 'System.String') LIKE '" & _
             tbxFilterKostenstelle.Text & "%'" _
             & " AND Status " & Vergleichstext( _
             cbxFilterOperatorProjektstatus.Text, cbxFilterStatus.Text) _
             & " AND Projektkategorie " & Vergleichstext( _
             cbxFilterOperatorProjektkategorie.Text, _
             cbxFilterProjektkategorie.Text) _
             & " AND Projekttyp " & Vergleichstext( _
             cbxFilterOperatorProjekttyp.Text, cbxFilterProjekttyp.Text) _
             & " AND Projektleiter " & Vergleichstext( _
             cbxFilterOperatorProjektleiter.Text, cbxFilterProjektleiter.Text)
 
 
 
dgvProjektübersicht2.DataSource = dv
Und hier die dazugehörige Funktion

    Public Function Vergleichstext(ByVal Vergleichsoperator As String, ByVal _
      Suchtext As String)
        Dim strText As String
        Select Case Vergleichsoperator
            Case "Ist gleich"
                strText = " = '" & Suchtext & "'"
            Case "Enthält"
                strText = " LIKE '%" & Suchtext & "%'"
            Case "Enthält nicht"
                strText = " <> '" & Suchtext & "'"
            Case "Beginnt mit"
                strText = " LIKE '%" & Suchtext & "'"
            Case "Endet mit"
                strText = " LIKE '" & Suchtext & "%'"
            Case Else
                strText = " LIKE '%'"
        End Select
        Return strText
 
    End Function
Trotzdem vielen Dank für eure Antworten.

Gruß Josch
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Vergleichsoperatoren im LINQ-Ausdruck 
Autor: ModeratorDaveS (Moderator)
Datum: 07.11.14 14:03

Man kann auch sowas schreiben
        Dim query = From customer In dt.AsEnumerable() Where customer.Field(Of _
          String)("CompanyName") Like "*GmbH*"
Die Bedingung ist auch nur Code...

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Vergleichsoperatoren im LINQ-Ausdruck 
Autor: Josch54
Datum: 10.11.14 13:13

Hallo Dave,

das mit den Platzhaltern ist mir schon klar.
das was ich gesucht hätte ist z.B.
Dim query = From customer In dt.AsEnumerable() Where customer.Field(Of _
            String)("CompanyName") & " Like " & "*GmbH*"
oder
Dim query = From customer In dt.AsEnumerable() Where customer.Field(Of _
            String)("CompanyName") & " NOT Like " & "*GmbH*"
oder
Dim query = From customer In dt.AsEnumerable() Where customer.Field(Of _
            String)("CompanyName") & " = " & "GmbH"
Gruß Josch
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Vergleichsoperatoren im LINQ-Ausdruck 
Autor: ModeratorDaveS (Moderator)
Datum: 10.11.14 16:34

Ja, wie gesagt, die Bedingung ist nur Code, du kannst auch eine Funktion aufrufen
        Dim query = From customer In dt.AsEnumerable() Where compare( _
          comboBox1.Text, customer.Field(Of String)("CompanyName"), _
          textBox1.Text)
 
    ' Logik nicht vollständig...
    Public Function compare(ByVal op As String, item As String, ByVal arg As _
      String) As Boolean
        If op = "LIKE" Then
            Return item Like "*" & arg & "*"
        End If
        Return False
    End Function
Aber RowFilter ist durchaus sinnvoll.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel