Вопрос

CreateEntity(UserConnection) и фильтры

Добрый день. Вопрос - можно ли добавить несколько фильтров                 accountEsq.Filters.LogicalOperation = LogicalOperationStrict.Or;
var accountIdNumberEsqFilter = accountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "PsIdNumber", request.IdNumber);
var accountIdFixEsqFilter = accountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "PsIdFix", request.IdNumber);
var accountServiceCrmIdEsqFilter = accountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "PsServiceCrmId", request.IdNumber);
accountEsq.Filters.Add(accountIdNumberEsqFilter);
accountEsq.Filters.Add(accountIdFixEsqFilter);
accountEsq.Filters.Add(accountServiceCrmIdEsqFilter);

в

CreateEntity(UserConnection)

так как в

UserConnection.EntitySchemaManager.GetInstanceByName,

или только использовать FetchFromDB ?

У меня такой же вопрос

1 комментарий

Функция CreateEntity создаёт новую запись с пустыми полями, фильтры тут не имеют смысла:

var contactCareerSchema = UserConnection.EntitySchemaManager.GetInstanceByName("ContactCareer");	
var contactCareerEntity = contactCareerSchema.CreateEntity(UserConnection);
contactCareerEntity.SetDefColumnValues();
contactCareerEntity.SetColumnValue("Id", Guid.NewGuid());
contactCareerEntity.SetColumnValue("ContactId", NewMainContact);
contactCareerEntity.SetColumnValue("AccountId", EntityPrimaryColumnValue);
contactCareerEntity.SetColumnValue("Current", true);
contactCareerEntity.Save();

Другой её способ использования вместе с FetchFromDB, вытягивание записи по Id:

var schema = UserConnection.EntitySchemaManager.FindInstanceByName("SysAdminUnit");
var sysAdminUnit = schema.CreateEntity(UserConnection);
if (sysAdminUnit.FetchFromDB(recordId)) {
	var p = new Dictionary<string, string>();
	p.Add("LDAPEntryId", sysAdminUnit.GetTypedColumnValue<string>("LDAPEntryId"));
...

Наконец, вытягивать можно не только по Id, но и по другим условиям, как тут:

Dictionary<string, object> conditions = new Dictionary<string, object>();
var userId = (context.ThrowEventArgs as List<object>)[0].ToString();
var roleId = new Guid("A29A3BA5-4B0D-DE11-9A51-005056C00008");
conditions["SysUser"] = userId;
var sysUserInRoleSchema = Page.UserConnection.EntitySchemaManager.GetInstanceByName("SysUserInRole");
conditions["SysRole"] = roleId;
var sysUserInRole = sysUserInRoleSchema.CreateEntity(Page.UserConnection);
if (sysUserInRole.FetchFromDB(conditions)) {
	return true;
}

Возможно, Вам нужно сделать похожее на последний вариант. Но если из-за Or условие слишком сложное, проще будет использовать обычное получение коллекции после наложения фильтров:

var couponESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Coupon");
	couponESQ.AddColumn("BonusesPayedAmount");
	couponESQ.AddColumn("CouponCard");
couponESQ.Filters.Add(couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "Purchase", purchaseId));
var cardFilters = new EntitySchemaQueryFilterCollection(couponESQ, LogicalOperationStrict.Or);
var permanentCardIdfilter = couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "CouponCard.Type", Terrasoft.Configuration.CardConsts.PermanentTypeUId);
cardFilters.Add(permanentCardIdfilter);
var temporaryCardIdfilter = couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "CouponCard.Type", Terrasoft.Configuration.CardConsts.TemporaryTypeUId);
cardFilters.Add(temporaryCardIdfilter);
var certificateCardIdfilter = couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "CouponCard.Type", Terrasoft.Configuration.CardConsts.SertificateTypeUId);
cardFilters.Add(certificateCardIdfilter);
couponESQ.Filters.Add(cardFilters);
var couponEntities = couponESQ.GetEntityCollection(UserConnection);
if (couponEntities.Count > 0) {
	foreach (var coupon in couponEntities) {
		var bonusesPayedAmount = coupon.GetTypedColumnValue<decimal>("BonusesPayedAmount");
...

 

Войдите или зарегистрируйтесь, чтобы комментировать