Как взять строку с таблицы с диапазоном значений

wmajiug3e

Client
Регистрация
29.11.2019
Сообщения
64
Благодарностей
16
Баллы
8
Есть таблица, там есть столбик с ценой
97963
как можно брать случайную строку которая равна выражению например цена от 4.03 до 4.35? Скилла хватило сделать чтобы, брало случайную строку, а потом уже проверять подходит ли цена под указанный диапазон, но это очень долго приходится перебирать. Хотелось бы сразу получать с таблицы товар с нужным диапазоном цены.
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 146
Благодарностей
493
Баллы
83
C#:
var tb = project.Tables["table"]; //Здесь указываем свою таблицу
string cell_with_number = "B"; //Здес столбец, в котором лежат числа

decimal min_value = 5.15M; //Минимальное значение
decimal max_value = 5.7M; //Максимальное значение

List<IEnumerable<string>> good_rows = new List<IEnumerable<string>>(); //Создаем список со строками


for (int i = 0; i < tb.RowCount; i++) //Начинаем перебор всех строк таблицы
{
    decimal got_dec = decimal.Parse(tb.GetCell(cell_with_number,i)); //Парсим число из столбца
    if (got_dec >= min_value && got_dec <= max_value) //Если оно подходит по условиям
    {
        var got_row = tb.GetRow(i); //Берем строку
        good_rows.Add(got_row); //Добавляем в список строк
    }
}

if (good_rows.Count > 0) //Если список строк больше 0
{
    var rnd = new Random(); //Создаем рандом
    int index_randomed = rnd.Next(good_rows.Count); //Рандомим до максимального значения == количеству строк в списке со строками
    
    var got_row_finally = good_rows[index_randomed]; //Берем срандомленную строку
    project.Variables["taken_row"].Value = string.Join(";",got_row_finally); //Пихаем ее в переменную
}
 
  • Спасибо
Реакции: Sho

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 146
Благодарностей
493
Баллы
83
В строке 12 может быть ошибка, т.к. при разных языковых пакетах системы числа по дефолту пишутся по-разному. Будет ошибка - пробуйте так:

C#:
decimal got_dec = decimal.Parse(tb.GetCell(cell_with_number,i).Replace(",","."), CultureInfo.InvariantCulture); //Парсим число из столбца
Однако, перед этим необходимо будет добавить "Директивы using и общий код" и прописать там эти строки:
using System.Collections;
using System.Globalization;

97973
 
  • Спасибо
Реакции: Alex.A

wmajiug3e

Client
Регистрация
29.11.2019
Сообщения
64
Благодарностей
16
Баллы
8
Спасибо большое, буду пробовать
 
  • Спасибо
Реакции: Sho

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)