Добрый день. Вопрос - можно ли добавить несколько фильтров 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 ?
Нравится
Функция 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"); ...