Trouver une valeur dans DataTable

Existe-t-il un moyen de trouver une valeur dans DataTable en C# sans effectuer une opération ligne par ligne?

La valeur peut être une partie de (une sous-chaîne de la rangée[nomrubrique].valeur, séparée par une virgule) Une cellule dans le datatable et la valeur peuvent être présents dans l'une des colonnes de la ligne.

30
demandé sur bluish 2009-03-11 12:12:11

4 réponses

Un objet DataTable ou DataSet aura une méthode Select qui retournera un tableau DataRow de résultats basé sur la requête transmise en tant que paramètre.

En regardant votre exigence, votre expression de filtre devra être quelque peu générale pour que cela fonctionne.

myDataTable.Select("columnName1 like '%" + value + "%'");
51
répondu Andy Rose 2009-03-11 09:25:04

Peut-être que vous pouvez filtrer les lignes par des colonnes possibles comme ceci:

DataRow[] filteredRows = 
  datatable.Select(string.Format("{0} LIKE '%{1}%'", columnName, value));
14
répondu Canavar 2009-03-11 09:26:17

AFAIK, il n'y a rien intégré pour rechercher toutes les colonnes. Vous pouvez utiliser {[0] } uniquement contre la clé primaire. Select nécessite des colonnes spécifiées. Vous pouvez peut-être utiliser LINQ, mais finalement cela fait juste la même boucle. Peut-être simplement le dérouler vous-même? Ça va être lisible, au moins.

8
répondu Marc Gravell 2009-03-11 09:26:30

Cette question posée en 2009 mais je veux partager mes codes:

    Public Function RowSearch(ByVal dttable As DataTable, ByVal searchcolumns As String()) As DataTable

    Dim x As Integer
    Dim y As Integer

    Dim bln As Boolean

    Dim dttable2 As New DataTable
    For x = 0 To dttable.Columns.Count - 1
        dttable2.Columns.Add(dttable.Columns(x).ColumnName)
    Next

    For x = 0 To dttable.Rows.Count - 1
        For y = 0 To searchcolumns.Length - 1
            If String.IsNullOrEmpty(searchcolumns(y)) = False Then
                If searchcolumns(y) = CStr(dttable.Rows(x)(y + 1) & "") & "" Then
                    bln = True
                Else
                    bln = False
                    Exit For
                End If
            End If
        Next
        If bln = True Then
            dttable2.Rows.Add(dttable.Rows(x).ItemArray)
        End If
    Next

    Return dttable2


End Function
-1
répondu user4723665 2015-03-28 11:03:26