2013-12-17 14 views
25

Ho due colonne in un DataTable:trovare la riga in DataTable con specifico id

ID, Calls. 

Come faccio a trovare quale sia il valore delle chiamate è where ID = 5?

5 potrebbe essere qualsiasi numero, è solo per esempio. Ogni riga ha un ID univoco.

+0

Non potresti farlo come parte dell'istruzione select? "SELEZIONA ID, chiama FROM MyTable WHERE ID = @ id_search". Quindi basta fornire il parametro "@id_search" alla chiamata del database. Questo sarà più veloce di LINQ, specialmente assumendo che l'ID sia una chiave primaria o indicizzata. –

+0

Non un database, dataset/datatable im fear. – RSM

risposta

45

Fare un criterio di stringa da cercare, in questo modo:

string searchExpression = "ID = 5" 

quindi utilizzare il metodo del DataTable.Select() oggetto, come questo:

DataRow[] foundRows = YourDataTable.Select(searchExpression); 

Ora è possibile scorrere i risultati, come questo:

int numberOfCalls; 
bool result; 
foreach(DataRow dr in foundRows) 
{ 
    // Get value of Calls here 
    result = Int32.TryParse(dr["Calls"], out numberOfCalls); 

    // Optionally, you can check the result of the attempted try parse here 
    // and do something if you wish 
    if(result) 
    { 
     // Try parse to 32-bit integer worked 

    } 
    else 
    { 
     // Try parse to 32-bit integer failed 

    } 
} 
+0

Questo mi dà il datarow, ma come ottengo il valore specifico dalla colonna chiama – RSM

+0

@RyanMurphy - risposta aggiornata per mostrare come ottenere valore dalla riga e tentare in modo sicuro di analizzare il valore. –

+0

Grazie per il vostro aiuto amico – RSM

33

È possibile utilizzare LINQ to DataSet/DataTable

var rows = dt.AsEnumerable() 
       .Where(r=> r.Field<int>("ID") == 5); 

Dal momento che ogni riga ha un ID univoco, è necessario utilizzare Single/SingleOrDefault che avrebbe gettato un'eccezione se si ottiene più record indietro.

DataRow dr = dt.AsEnumerable() 
       .SingleOrDefault(r=> r.Field<int>("ID") == 5); 

(sostituto int per il tipo di campo ID)

+1

Alcune volte non è possibile selezionare le righe dalla tabella utilizzando questo "DataRow [] foundRows = YourDataTable.Select (searchExpression);". Ma quando sto usando LINQ. Funziona bene. Grazie Habib. –

+1

Grazie! Mi piace LINQ. –

3
DataRow dataRow = dataTable.AsEnumerable().FirstOrDefault(r => Convert.ToInt32(r["ID"]) == 5); 
if (dataRow != null) 
{ 
    // code 
} 

Se si tratta di un DataSet tipizzato:

MyDatasetType.MyDataTableRow dataRow = dataSet.MyDataTable.FirstOrDefault(r => r.ID == 5); 
if (dataRow != null) 
{ 
    // code 
} 
11

Si può provare con il metodo selezionare

DataRow[] rows = table.Select("ID = 7"); 
0

prova questo codice

DataRow foundRow = FinalDt.Rows.Find(Value); 

ma fissato a noleggio, per un primario chiave

1

Ciao basta creare una semplice funzione che appare come mostrato di seguito .. che restituisce tutte le righe in cui il parametro di chiamata immesso è valido o vero.

public DataTable SearchRecords(string Col1, DataTable RecordDT_, int KeyWORD) 
    { 
     TempTable = RecordDT_; 
     DataView DV = new DataView(TempTable); 
     DV.RowFilter = string.Format(string.Format("Convert({0},'System.String')",Col1) + " LIKE '{0}'", KeyWORD); 
     return DV.ToTable(); 
    } 

e chiamare semplicemente come mostrato di seguito;

DataTable RowsFound=SearchRecords("IdColumn", OriginalTable,5); 

dove 5 è l'ID. Grazie ..

4

Potrei usare il seguente codice. Grazie a tutti.

int intID = 5; 
DataTable Dt = MyFuctions.GetData(); 
Dt.PrimaryKey = new DataColumn[] { Dt.Columns["ID"] }; 
DataRow Drw = Dt.Rows.Find(intID); 
if (Drw != null) Dt.Rows.Remove(Drw); 
0

Provare a evitare loop inutili e andare per questo se necessario.

string SearchByColumn = "ColumnName=" + value; 
DataRow[] hasRows = currentDataTable.Select(SearchByColumn); 
if (hasRows.Length == 0) 
{ 
    //your logic goes here 
} 
else 
{ 
    //your logic goes here 
} 

Se si desidera eseguire la ricerca per ID specifico, è necessario inserire una chiave primaria in una tabella.