Подтвердить что ты не робот

Как получить конкретное значение столбца из DataTable?

У меня есть datatable. Мне нужно получить определенное значение столбца на основе ввода пользователя. Например, предположим, что у datatable есть два столбца CountryID и CountryName.

Мне нужно найти CountryID в datatable на основе имени страны ввода пользователя. Я мог бы просто открыть соединение с БД и запустить запрос select countryID из страны, где countryName = @userinput. В любом случае я могу сделать это на основе данных.

4b9b3361

Ответ 1

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

Ответ 2

foreach (DataRow row in Datatable.Rows) 
{
    if (row["CountryName"].ToString() == userInput) 
    {
        return row["CountryID"];
    }
}

В то время как это может не скомпилироваться напрямую, вы должны получить эту идею, также я уверен, что это будет намного лучше, чем запрос через SQL, поскольку огромный datatable займет много времени, чтобы пробежать все строки.

Ответ 3

Я предлагаю такой способ на основе методов расширения:

IEnumerable<Int32> countryIDs =
    dataTable
    .AsEnumerable()
    .Where(row => row.Field<String>("CountryName") == countryName)
    .Select(row => row.Field<Int32>("CountryID"));

Необходимо указать ссылку на System.Data.DataSetExtensions.dll.

Ответ 4

Я предполагаю, что вы могли бы использовать объект 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");
}

Ответ 5

У Datatables есть метод .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

Конечно, если userinput содержит "символ", это приведет к возникновению исключения (например, если вы запрашиваете базу данных). Вам следует избегать символов (я использую функцию для этого).

Ответ 6

По названию поста мне просто нужно было получить все значения из определенного столбца. Вот код, который я использовал для этого.

    public static IEnumerable<T> ColumnValues<T>(this DataColumn self)
    {
        return self.Table.Select().Select(dr => (T)Convert.ChangeType(dr[self], typeof(T)));
    }