Si ottiene l'errore perché il parametro su Select
è il filtro Expression e sono state passate tutte le colonne. Comprendere filterExpression come clausola WHERE
in sql. Vuoi tutte le colonne ma vuoi filtrarne solo una. Ottieni comunque tutte le colonne poiché fanno tutti parte dello DataTable
/DataView
, quindi non è necessario elencarle in modo esplicito.
Si potrebbe utilizzare il DataTable.Select
, DatView.RowFilter
metodi o LINQ-to-DataSet
:
LINQ to DataSet (che io preferisco):
var filtered = tb.AsEnumerable()
.Where(r => r.Field<String>("CREATOR").Contains(searchstring));
ADO.NET (DataTable.Select
):
DataRow[] filteredRows = tb.Select("CREATOR LIKE '%" + searchstring + "%'");
ADO.NET (DataView.RowFilter
):
tb.DefaultView.RowFilter = "CREATOR LIKE '%" + searchstring + "%'";
Se si vuole cercare questo string
in qualsiasi colonna, invece:
DataRow[] filteredRows = tb.Select("FIRSTNAME LIKE '%" + searchstring + "%' OR LASTNAME LIKE '%" + searchstring + "%' OR NAME LIKE '%" + searchstring + "%' OR COMPANY LIKE '%" + searchstring + "%' OR CREATOR LIKE '%" + searchstring + "%'");
Lo stesso con Linq:
var filtered = tb.AsEnumerable()
.Where(r => r.Field<String>("FIRSTNAME").Contains(searchstring)
|| r.Field<String>("LASTNAME").Contains(searchstring))
|| r.Field<String>("NAME").Contains(searchstring)
|| r.Field<String>("COMPANY").Contains(searchstring)
|| r.Field<String>("CREATOR").Contains(searchstring));
fonte
2013-01-24 09:03:32
ma voglio cercare in tutte le colonne :( – Tarasov
@Tarasov: Volete tutte le colonne, ma si desidera filtrare per uno, si ottiene tutte le colonne in ogni caso dal momento che sono tutta la parte di 'DataTable' /' DataView'. –
Voglio cercare ogni colonna in questa stringa di ricerca.Ho pensato che posso :( – Tarasov