これは、ユーザーがいくつかのテキスト ボックスに入力できる、または入力できない特定の情報を取得しようとするクエリで設定した関数です。ユーザーは...
- 会社名
- クライアントの名
- 技術者のファーストネーム
私が望むのは、クエリが "*" のようなすべてのフィールドを返すテキスト ボックスにユーザーが何も入力しない場合、LINQ が使用し、SQL が "%" を使用することだと思います。私は両方を試しましたが、すべてのクライアントとすべての技術者で特定の会社を取得できない理由がわかりません。
Public Function SpecificQueryInvoices(ByVal Company As String, ByVal Clientname As String, ByVal techname As String)
Dim specificQuerySetInformation = From invo In database.Invoices
Join orgs In database.Organizations
On orgs.OrgId Equals invo.OrgId
Join clien In database.Clients
On clien.ClientId Equals invo.ClientId
Join tec In database.Teches
On tec.TechId Equals invo.TechId
Order By invo.InvoiceId
Where orgs.OrgName.StartsWith(Company) And clien.FirstName.StartsWith(Clientname) And tec.FirstName.StartsWith(techname)
Select New With {.Company = orgs.OrgName, .Client = clien.FirstName, _
.Tech = tec.FirstName, invo.Date, _
invo.Notes, invo.Parts, invo.Labor, invo.Mileage, invo.TotalCost, _
invo.InvoiceNumber}
Return specificQuerySetInformation
End Function
Private Sub btnFilter_Click(sender As System.Object, e As System.EventArgs) Handles btnFilter.Click
Dim companyName As String
Dim ClientFirstName As String
Dim TechFirstName As String
If txtCompany.Text = "" Then
companyName = "*"
Else
companyName = txtCompany.Text
End If
If txtClientName.Text = "" Then
ClientFirstName = "*"
Else
ClientFirstName = txtClientName.Text
End If
If txtTechName.Text = "" Then
TechFirstName = "*"
Else
TechFirstName = txtTechName.Text
End If
DataGridView2.DataSource = SpecificQueryInvoices(companyName, ClientFirstName, TechFirstName)
MsgBox("Filter requested")
End Sub