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

Найти строку в datatable с определенным идентификатором

У меня есть два столбца в datatable:

ID, Calls. 

Как узнать, что значение Calls where ID = 5?

5 может быть anynumber, его только, например. Каждая строка имеет уникальный идентификатор.

4b9b3361

Ответ 1

Введите строковые критерии для поиска, например:

string searchExpression = "ID = 5"

Затем используйте метод .Select() объекта DataTable, например:

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

Теперь вы можете просмотреть результаты, например:

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

    }
}

Ответ 2

Вы можете использовать LINQ to DataSet/DataTable

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

Поскольку каждая строка имеет уникальный идентификатор, вы должны использовать Single/SingleOrDefault, который бы выбрал исключение, если вы получите несколько записей назад.

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

(Подставьте int для типа поля вашего идентификатора)

Ответ 3

Вы можете попробовать выбрать метод

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

Ответ 4

Я мог бы использовать следующий код. Спасибо всем.

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

Ответ 5

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

Если это типизированный DataSet:

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

Ответ 6

Здравствуйте, просто создайте простую функцию, которая выглядит так, как показано ниже. Это возвращает все строки, в которых введенный параметр вызова действителен или истинен.

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

и просто назовите его, как показано ниже;

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

где 5 - идентификатор. Спасибо..

Ответ 7

попробуйте этот код

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

но установите в аренду один первичный ключ

Ответ 8

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

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

Если вы хотите выполнить поиск по определенному идентификатору, тогда в таблице должен быть первичный ключ.