Как получить конкретное значение столбца из таблицы данных? - PullRequest
34 голосов
/ 27 мая 2010

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

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

Ответы [ 6 ]

64 голосов
/ 27 мая 2010
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();
17 голосов
/ 27 мая 2010
foreach (DataRow row in Datatable.Rows) 
{
    if (row["CountryName"].ToString() == userInput) 
    {
        return row["CountryID"];
    }
}

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

9 голосов
/ 28 августа 2014

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

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

System.Data.DataSetExtensions.dll должна быть указана.

1 голос
/ 27 мая 2010

В таблицах данных есть метод .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 содержит символ ', это вызовет исключение (например, если вы запрашиваете базу данных). Вы должны экранировать символы '(для этого я использую функцию).

1 голос
/ 27 мая 2010

Полагаю, вы могли бы вместо этого использовать объект 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");
}
0 голосов
/ 17 января 2019

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

    public static IEnumerable<T> ColumnValues<T>(this DataColumn self)
    {
        return self.Table.Select().Select(dr => (T)Convert.ChangeType(dr[self], typeof(T)));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...