none
Where condition LINQ RRS feed

  • Domanda

  • Buongiorno ragazzi,

    ho bisogno del vs prezioso aituo...

    Ho bisogno di utilizzare linq nel seguente modo:

    (From c In toDoList Select c Where c.Id_Testata = txt_numCartellaTodolist.Text And c.OLN = txt_numOrdineTodolist.Text)

    se txt_numCartellaTodolist.Text e txt_numOrdineTodolist.Text sono valorizzati tutto ok, ma se uno dei due non è valorizzato mi viene generato l'errore String formato non corretto. 

    In pratica ho bisogno di non aggiungere la where condition quando una textbox non è valorizzata.

    Come fare???

    Grazie mille cm sempre.

    Saluti Tony

    martedì 21 giugno 2016 07:31

Risposte

  • Buongiorno tony_831,

    vedo stai utilizzando la sintassi VB. Potresti ad esempio spezzare la query in due step: il primo, che selezioni tutti i valori della tua lista iniziale, mentre il secondo va a filtrare ulteriormente se entrambe le caselle di testo sono valorizzate.

    Ad esempio:

    Dim l = (From c In toDoList Select c)
    If txt_numCartellaTodolist.Text.compareTo("") <> 0 And txt_numOrdineTodolist.Text.CompareTo("") <> 0 Then
        l = l.Where(Function(x) x.Id_Testata = txt_numCartellaTodolist.Text And x.OLN = txt_numOrdineTodolist.Text)
    End If

    In questo caso, la variabile "l" contiene, inizialmente, tutti i valori presenti in toDoList. Poi, se entrambe le TextBox hanno una proprietà Text diversa da blank, viene applicato un secondo filtro. In questo caso, passando per il blocco condizionale, "l" conterrà i valori filtrati.


    Emiliano Musso // Microsoft MVP .NET

    • Contrassegnato come risposta tony_831 martedì 21 giugno 2016 08:25
    martedì 21 giugno 2016 08:12

Tutte le risposte

  • Buongiorno tony_831,

    vedo stai utilizzando la sintassi VB. Potresti ad esempio spezzare la query in due step: il primo, che selezioni tutti i valori della tua lista iniziale, mentre il secondo va a filtrare ulteriormente se entrambe le caselle di testo sono valorizzate.

    Ad esempio:

    Dim l = (From c In toDoList Select c)
    If txt_numCartellaTodolist.Text.compareTo("") <> 0 And txt_numOrdineTodolist.Text.CompareTo("") <> 0 Then
        l = l.Where(Function(x) x.Id_Testata = txt_numCartellaTodolist.Text And x.OLN = txt_numOrdineTodolist.Text)
    End If

    In questo caso, la variabile "l" contiene, inizialmente, tutti i valori presenti in toDoList. Poi, se entrambe le TextBox hanno una proprietà Text diversa da blank, viene applicato un secondo filtro. In questo caso, passando per il blocco condizionale, "l" conterrà i valori filtrati.


    Emiliano Musso // Microsoft MVP .NET

    • Contrassegnato come risposta tony_831 martedì 21 giugno 2016 08:25
    martedì 21 giugno 2016 08:12
  • Aggiungo inoltre che, più semplicemente, potresti mantenere inalterata la tua query, e gestire - prima di arrivare ad essa - la condizione delle due TextBox vuote, magari assegnando ad esse un valore di default nel caso.

    Emiliano Musso // Microsoft MVP .NET

    martedì 21 giugno 2016 08:21
  • Grazie davvero Emiliano,

    il tuo spunto mi è servito per risolvere in questo modo:

      If txt_numCartellaTodolist.Text.CompareTo("") <> 0 Then
                    toDoList_filtrata = toDoList_filtrata.Where(Function(x) x.Id_Testata = txt_numCartellaTodolist.Text).ToList
                End If

                If txt_numOrdineTodolist.Text.CompareTo("") <> 0 Then
                    toDoList_filtrata = toDoList_filtrata.Where(Function(x) x.OLN = txt_numOrdineTodolist.Text).ToList
                End If

                If ddlStatoCartellaToDoList.SelectedValue <> "Tutti" Then
                    toDoList_filtrata = toDoList_filtrata.Where(Function(x) x.Stato = ddlStatoCartellaToDoList.SelectedValue).ToList
                End If

                todoGridView.DataSource = toDoList_filtrata.ToList
                todoGridView.DataBind()

    Siete perfetti cm sempre!

    martedì 21 giugno 2016 08:25