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.
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.
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
}
}
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)
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. –
Dziękujemy! Lubię LINQ. –
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
}
Można spróbować metodą wybrać
DataRow[] rows = table.Select("ID = 7");
spróbuj wpisać ten kod:
DataRow foundRow = FinalDt.Rows.Find(Value);
ale ustawić co najmniej jedno klucz podstawowy
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 ..
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);
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.
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. –
Nie jest to baza danych, zbiór danych/datatable im się boi. – RSM