У меня есть таблица данных. Я должен выбрать определенное значение столбца на основе ввода данных пользователем. Например, позволяет, говорят, что таблица данных имеет два столбца CountryID и CountryName.
Я должен найти CountryID в таблице данных на основе названия страны ввода данных пользователем. Я мог просто открыть соединение с DB и работать, запрос выбирают countryID из Страны где countryName = @userinput. Есть ли так или иначе, я мог сделать это на таблице данных.
string countryName = "USA";
DataTable dt = new DataTable();
int id = (from DataRow dr in dt.Rows
where (string)dr["CountryName"] == countryName
select (int)dr["id"]).FirstOrDefault();
Я полагаю, вы могли бы использовать вместо этого объект DataView, тогда это позволило бы вам воспользоваться преимуществом свойства RowFilter, как описано здесь:
http://msdn.microsoft.com/en-us/library/system. data.dataview.rowfilter.aspx
private void MakeDataView()
{
DataView view = new DataView();
view.Table = DataSet1.Tables["Countries"];
view.RowFilter = "CountryName = 'France'";
view.RowStateFilter = DataViewRowState.ModifiedCurrent;
// Simple-bind to a TextBox control
Text1.DataBindings.Add("Text", view, "CountryID");
}
foreach (DataRow row in Datatable.Rows)
{
if (row["CountryName"].ToString() == userInput)
{
return row["CountryID"];
}
}
Хотя это может не компилироваться напрямую, вы должны уловить идею, но я уверен, что было бы намного лучше сделать запрос через SQL в виде огромной таблицы данных займет много времени, чтобы пройти через все строки.
Таблицы данных имеют метод .Select, который возвращает массив строк в соответствии с указанными вами критериями. Примерно так:
Dim oRows() As DataRow
oRows = dtCountries.Select("CountryName = '" & userinput & "'")
If oRows.Count = 0 Then
' No rows found
Else
' At least one row found. Could be more than one
End If
Конечно, если пользовательский ввод содержит символ ', это вызовет исключение (например, если вы запросите базу данных). Вы должны экранировать символы '(для этого я использую функцию).