2013-12-17 16 views
25

Mam dwie kolumny w DataTable:Znajdź wiersz w DataTable z konkretnym identyfikatorze

ID, Calls. 

Jak znajdę co wartość połączeń jest where ID = 5?

5 może być liczbą całkowitą, na przykład. Każdy wiersz ma unikalny identyfikator.

+0

Nie możesz tego zrobić jako części instrukcji select? "SELECT ID, wywołania z MyTable WHERE ID = @ id_search". Następnie wystarczy podać parametr "@id_search" w wywołaniu bazy danych. To będzie szybsze niż LINQ, szczególnie przy założeniu, że ID jest kluczem podstawowym lub indeksowanym. –

+0

Nie jest to baza danych, zbiór danych/datatable im się boi. – RSM

Odpowiedz

45

dokonać kryteria smyczkowe, aby szukać, jak to:

string searchExpression = "ID = 5" 

Następnie użyj sposobu DataTable.Select() obiekt taki jak ten:

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

Teraz możesz pętli wyników, na przykład:

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

To daje mi datarow, ale jak uzyskać konkretną wartość z wywołań kolumn – RSM

+0

@RyanMurphy - zaktualizowana odpowiedź, aby pokazać, jak uzyskać wartość poza wierszem i bezpiecznie spróbować przeanalizować wartość. –

+0

Dzięki za pomoc mate – RSM

33

Można użyć LINQ do DataSet/DataTable

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

Ponieważ każdy wiersz ma unikatowy identyfikator, należy użyć Single/SingleOrDefault które mogłyby rzucić wyjątek, jeśli masz wiele rekordów z powrotem.

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

(Zastępca int do rodzaju swojej dziedzinie ID)

+1

Czas nie można wybrać wierszy z tabeli za pomocą tego "DataRow [] foundRows = YourDataTable.Select (searchExpression);". Ale kiedy używam LINQ. Działa dobrze. Dzięki Habib. –

+1

Dziękujemy! Lubię LINQ. –

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

Jeśli jest to zestaw danych wpisywanych:

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

Można spróbować metodą wybrać

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

spróbuj wpisać ten kod:

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

ale ustawić co najmniej jedno klucz podstawowy

1

Witam prostu stworzyć prostą funkcję, która wygląda jak pokazano poniżej .. która zwraca wszystkie wiersze, w których parametr wywołania wpisany jest prawidłowy, czy to prawda.

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(); 
    } 

i po prostu wywołaj to w sposób pokazany poniżej;

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

gdzie 5 to identyfikator. Dzięki ..

4

Mogę użyć następującego kodu. Dziękuję wszystkim.

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

Spróbuj unikać niepotrzebnych pętli i przejdź do tego, jeśli to konieczne.

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

Jeśli chcesz wyszukiwać według określonego identyfikatora, klucz powinien znajdować się w tabeli.

Powiązane problemy