/// <summary> /// Search members in database by given criteria /// </summary> /// <param name="criteria"></param> /// <returns></returns> public virtual MembersSearchResult SearchMembers(MembersSearchCriteria criteria) { var retVal = new MembersSearchResult(); using (var repository = RepositoryFactory()) { var query = LinqKit.Extensions.AsExpandable(repository.Members); if (!criteria.MemberTypes.IsNullOrEmpty()) { query = query.Where(x => criteria.MemberTypes.Contains(x.MemberType) || x.MemberType == null); } if (criteria.MemberId != null) { //TODO: DeepSearch in specified member query = query.Where(x => x.MemberRelations.Any(y => y.AncestorId == criteria.MemberId)); } else { if (!criteria.DeepSearch) { query = query.Where(x => !x.MemberRelations.Any()); } } //Get extra predicates (where clause) var predicate = GetQueryPredicate(criteria); query = query.Where(LinqKit.Extensions.Expand(predicate)); var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = ReflectionUtility.GetPropertyName <Member>(x => x.MemberType), SortDirection = SortDirection.Descending } }; } query = query.OrderBySortInfos(sortInfos); retVal.TotalCount = query.Count(); retVal.Members = query.Skip(criteria.Skip).Take(criteria.Take).ToArray() .Select(x => x.ToMember(MemberFactory.TryCreateMember(x.MemberType))).ToList(); return(retVal); } }
/// <summary> /// Return members by requested ids can be override for load extra data for resulting members /// </summary> /// <param name="memberIds"></param> /// <param name="memberTypes"></param> /// <returns></returns> public virtual Member[] GetByIds(string[] memberIds, string[] memberTypes = null) { var retVal = new List <Member>(); using (var repository = RepositoryFactory()) { var dataMembers = repository.GetMembersByIds(memberIds, memberTypes); foreach (var dataMember in dataMembers) { var member = MemberFactory.TryCreateMember(dataMember.MemberType); if (member != null) { dataMember.ToMember(member); retVal.Add(member); } } } foreach (var member in retVal) { //Load dynamic properties for member DynamicPropertyService.LoadDynamicPropertyValues(member); } return(retVal.ToArray()); }