Доброго времени суток , Возможно ли в БП одним элементом "Читать данные" c режимом читать коллекцию записей отбирая одно поле к примеру "Id" и в другом элементе сравнить Id с коллекцией Id ранее полученных ? Имеется ли вообще какой ниб тип сравнивания с коллекцией значений ?
Нравится
Сравнения с коллекцией с помощью встроенных элементов, насколько я знаю, не существует. Вместе с тем, вы можете:
1. Передать коллекцию в скрипт-таск (задание-сценарий) и сделать поиск вашего id там.
2. Искать ваш id циклом - т.е. не читать коллекцию записей сразу, а каждую запись по очереди. После прочтения каждой записи изменяете какое-нибудь подходящее для этого поле (я часто грешу и ставлю текущую дату в поле "Дата изменения", а в условиях выборки ставлю сортировку по дате изменения по возрастанию) - таким образом перебираете всю выборку и находите искомую запись по id.
3. Если речь идет об id в одном и том же объекте, и вам нужно просто обнаружить факт наличия id в выборке, то вам может быть достаточно посчитать количество записей, соответствующих этому id или просто проверить результат выборки по искомому id на Guid.Empty.
Сравнения с коллекцией с помощью встроенных элементов, насколько я знаю, не существует. Вместе с тем, вы можете:
1. Передать коллекцию в скрипт-таск (задание-сценарий) и сделать поиск вашего id там.
2. Искать ваш id циклом - т.е. не читать коллекцию записей сразу, а каждую запись по очереди. После прочтения каждой записи изменяете какое-нибудь подходящее для этого поле (я часто грешу и ставлю текущую дату в поле "Дата изменения", а в условиях выборки ставлю сортировку по дате изменения по возрастанию) - таким образом перебираете всю выборку и находите искомую запись по id.
3. Если речь идет об id в одном и том же объекте, и вам нужно просто обнаружить факт наличия id в выборке, то вам может быть достаточно посчитать количество записей, соответствующих этому id или просто проверить результат выборки по искомому id на Guid.Empty.
А почему бы просто в элементе чтения данных не отфильтровать дополнительно записи по значению поля, равному интересующему Id? Так не будет необходимости загружать лишние данные и сразу будет видно, есть результаты или выборка пустая.
Или же Вы хотите сравнивать коллекцию с коллекцией? Тогда придётся скриптами, и то, лучше не делать выборки отдельно, а сконструировать более сложный Select, выбирающий за раз нужное.
Ксензов Егор,
1-ый метод подходит но не такой удобный как хотелось бы).
2-ой метод я вообще молчу, ну скажем так для больших данных врядли подойдет.
3-ий метод не совсем понял как именно предлагаете , ( мой пример , к примеру одним запросом я получаю список контактов которые входят в опр деталь , и для этих N контактов хочу изменить права доступа на опр объект)
Зверев Александр,
мне нужно select * where id_Contact in (select id_Contact from Detail where Date > '02022019') Это я сейчас утрируя написал естественно , средствами БП можно это сделать ?
В скрипте БП можно использовать класс Select (или Update, Delete). Все они умеют вызывать подзапросы с In:
var existsInBonusesDeduction = new Select(userConnection) .Column(Func.Count("Id")) .From("BonusesDeduction") .Where("ChargeTransactionId") .In(new Select(userConnection) .Column("Id") .From("Transaction") .Where("PurchaseId") .IsEqual(Column.Parameter(purchaseId)) .And("TypeId") .IsEqual(Column.Parameter(TransactionConsts.RecordTypeUId)) .And("StatusId") .IsEqual(Column.Parameter(TransactionConsts.CompletedStatusUId)) ) as Select; var existsInBonusesDeductionResult = existsInBonusesDeduction.ExecuteScalar<int>(dbExecutor);