Как на C# entity запросом получить первую запись из выборки
Добрый день, возникла проблема, что я не могу взять больше 20 тыс одним запросом, поэтому было решено ограничить , брав только первую запись из выборки , каким образом это можно сделать. (это не бизнес процесс)
Нравится
var userConnection = Get<UserConnection>("UserConnection"); var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, <SchemaName>); esq.AddAllSchemaColumns(); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, <FieldName>, fieldValue)); var enitites = esq.GetEntityCollection(userConnection); ver entity = enitites.FirtsOrDefault();
Примерно так.
Дамиан, так делать неправильно, в момент GetEntityCollection всё равно будут получены все записи, соответствующие условиям.
Правильнее будет перед этим дописать:
esq.RowCount = 1;
Аналогично и с колонками, оставить только нужные.
Дмитрий, а почему такие крайности, от 20000 к 1? Что именно Вы получаете и что потом с этими данными делаете? Может, подобрать оптимальный размер порции для обработки за раз?
Как пропустить часть записей с начала и выбрать следующие несколько, см. в теме.
Александр, спасибо за уточнение. Нашёл еще один подход.
public Entity GetEntity(UserConnection userConnection) { var entitySchema = userConnection.EntitySchemaManager.GetInstanceByName(name); var esq = new EntitySchemaQuery(entitySchema); esq.AddAllSchemaColumns(); return esq.GetEntity(userConnection, primaryColumnValue); }
Тут всё зависит, сколько реально записей отфильтруется по такому условию. Если всегда 0 или 1, то можно и первым, и вторым Вашим способом. А если есть риск получить 100500 результатов, то лучше перестраховаться, ограничив количество в запросе.
Зверев Александр,
у нас логи по 1с пишутся в системе, куда отправили , что отправили , также получаем данные из 1с, из-за этого логов за один проход чуть больше 100 получается каждые пол часа
а первую запись из выборки мне надо для нумерации этих логов
Соответственно он не сможет дальше писать ничего , если при записи лога взял пулом 20 тыс записей разом
Если реально нужно считать одну запись, см. мой пример выше. Или вообще хранить и менять текущий номер отдельно в какой-то системной настройке, как сделано для нумерации договоров, счетов и подобного.
Зверев Александр,
Спасибо за строчку с лимитом на выборку записей.
esq.RowCount = 1; // 20_000 - максимальный лимит