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



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



ID, Calls. 


Как узнать, какое значение имеют вызовы where ID = 5?



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

1395   8  

8 ответов:

Создайте строку критериев для поиска, например:

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

    }
}

Вы можете использовать LINQ для 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 тип вашего поля ID)

Вы можете попробовать с помощью метода select

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

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

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);
DataRow dataRow = dataTable.AsEnumerable().FirstOrDefault(r => Convert.ToInt32(r["ID"]) == 5);
if (dataRow != null)
{
    // code
}

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

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

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

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

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

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

 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-идентификатор. Спасибо..

Старайтесь избегать ненужных петель и идите на это, если это необходимо.

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

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

Comments

    Ничего не найдено.