public virtual GenericSearchResult <DerivativeContract> SearchDerivativeContracts(DerivativeContractSearchCriteria criteria)
        {
            using (var repository = _repositoryFactory())
            {
                repository.DisableChangesTracking();

                var query = repository.DerivativeContracts;

                if (!criteria.MemberIds.IsNullOrEmpty())
                {
                    query = query.Where(dc => criteria.MemberIds.Contains(dc.MemberId));
                }

                if (!criteria.Types.IsNullOrEmpty())
                {
                    var criteriaTypes = criteria.Types.Select(x => x.ToString()).ToArray();
                    query = query.Where(dc => criteriaTypes.Contains(dc.Type));
                }

                if (criteria.OnlyActive)
                {
                    var now = DateTime.Now;
                    query = query.Where(dc => dc.IsActive && dc.StartDate <= now && (dc.EndDate == null || dc.EndDate >= now) && dc.Items.Any(dci => dci.RemainingQuantity > 0));
                }

                if (criteria.OnlyRemaining)
                {
                    query = query.Where(dc => dc.IsActive && dc.Items.Any(dci => dci.RemainingQuantity > 0));
                }

                var predicate = GetQueryPredicate(criteria);
                query = query.Where(predicate.Expand());

                var sortInfos = criteria.SortInfos;
                if (sortInfos.IsNullOrEmpty())
                {
                    sortInfos = new[]
                    {
                        new SortInfo {
                            SortColumn = "StartDate", SortDirection = SortDirection.Descending
                        },
                        new SortInfo {
                            SortColumn = "EndDate", SortDirection = SortDirection.Ascending
                        }
                    };
                }
                query = query.OrderBySortInfos(sortInfos);

                var totalCount            = query.Count();
                var derivativeContractIds = query.Select(dc => dc.Id).Skip(criteria.Skip).Take(criteria.Take).ToArray();

                return(new GenericSearchResult <DerivativeContract>
                {
                    Results = _derivativeContractService.GetDerivativeContractsByIds(derivativeContractIds).OrderBy(dc => dc.Id).ToList(),
                    TotalCount = totalCount
                });
            }
        }
        public IHttpActionResult GetByIds([FromUri] string[] ids)
        {
            var retVal = _derivativeContractService.GetDerivativeContractsByIds(ids);

            return(Ok(retVal.ToArray()));
        }