Member 14127871 Ответов: 3

Поиск значения с помощью datatable select в определенном диапазоне строк


Привет, я пытаюсь получить значение из определенного диапазона строк.

Что я уже пробовал:

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

var rows = dt.AsEnumerable().Skip(0).Take(15);
string value = "CB123";
DataRow[] result = dt.Select("BOOKCODE like '%" + value + "%'");
//foreach (var col in rows)
//{  
    if (result.Count() > 0)
     {
       MessageBox.Show("BookCode Not Found");
       //Application.Exit();
     }
//} 

3 Ответов

Рейтинг:
2

Bryian Tan

Вы можете попробовать что-то вроде приведенного ниже. Но имейте в виду, что результат может быть разным в зависимости от способа сортировки данных в системе. datatable. Или вы можете сделать так, чтобы источник данных возвращал row_number, как это было предложено другим членом, а затем фильтровать по этой переменной.


void Test()
{
    DataTable table = new DataTable();
    table.Columns.Add("Dosage", typeof(int));
    table.Columns.Add("Drug", typeof(string));
    table.Columns.Add("Patient", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));

    // Here we add five DataRows.
    table.Rows.Add(25, "Indocin", "David", DateTime.Now);
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);

    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
    table.Rows.Add(22, "xx", "dd", DateTime.Now);

    table.Rows.Add(777, "Dilantin 2", "cc", DateTime.Now);

    //this should return 10,21,100,22
    var resultRange = table.AsEnumerable()
                      .Where((row, index) => index >= 2 && 5 >= index)
                      .CopyToDataTable();

    //this should return 100
    var value = "di";
    var result = resultRange.Select("Drug like '%" + value + "%'");
}




c# - Как выбрать строки из DataTable на основе индекса / номера строки? - переполнение стека[^]

https://www.dotnetperls.com/datatable[^]


Рейтинг:
2

Christian Graus

строки.Выбрать....

Или вы можете использовать

ROW_NUMBER
внутри сохраненного proc для записи SQL, который фильтрует данные для вас.

Я никогда не видел SQL в фильтрации IEnumerable. Я не уверен, что это хорошая идея.


Рейтинг:
0

Maciej Los

Ты на правильном пути...

string bcode = "CB123";
var result = dt.AsEnumerable().Skip(0).Take(15)
     .Where(r=> r.Fields<string>("BOOKCODE").Contains(bcode))
     .ToList();
foreach(var r in result)
{
    //your logic
}


Для получения более подробной информации, пожалуйста, смотрите:
LINQ to DataSet | Microsoft Docs[^]
Руководство по программированию (LINQ to DataSet) | Microsoft Docs[^]
Обзор LINQ to DataSet | Microsoft Docs[^]