-1

これは、ユーザーがいくつかのテキスト ボックスに入力できる、または入力できない特定の情報を取得しようとするクエリで設定した関数です。ユーザーは...

  • 会社名
  • クライアントの名
  • 技術者のファーストネーム

私が望むのは、クエリが "*" のようなすべてのフィールドを返すテキスト ボックスにユーザーが何も入力しない場合、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
4

1 に答える 1

1

私はLINQが使用するものだと信じています

あなたが間違っている。LINQ はワイルドカードをまったく使用しません。

「ユーザーが値を入力していない」などのケースを処理したい場合は、クエリを動的に作成するだけで十分です。ワイルドカードを使用しないでください。結局、それはあなたの検索をより速くします。

于 2012-08-06T19:29:27.537 に答える