| |
VB.NET - Ein- und UmsteigerVergleichsoperatoren 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 | |
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.
| |
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 | |
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 | |
Re: Vergleichsoperatoren im LINQ-Ausdruck | | | Autor: DaveS (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 | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|
|
|
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
|
|