public DataSubList <MessageInfo> SearchMessages(
            MessageSearchParameters searchParameters,
            int framePosition,
            int frameSize)
        {
            ValidateFramePosition(framePosition);
            ValidateFrameSize(frameSize);
            searchParameters.Validate();

            var context = GetOrAddContext();
            var source  = GetContactSource(searchParameters.Source.Value);

            var messagesQuery =
                DbContext.Messages.Include(m => m.Contact)
                .Include(m => m.Status)
                .Include(m => m.Template.Event.EventType)
                .Where(m => m.Contact.SourceId == source.Id && m.Contact.ContextId == context.Id);

            messagesQuery = ApplyFilters(searchParameters, messagesQuery);

            var resultMessages =
                messagesQuery.OrderByDescending(m => m.UpdateTime)
                .Skip(framePosition)
                .Take(frameSize)
                .ToList(DebugInfoCollector, "Search messages");

            return(resultMessages.Select(ConvertToMessageInfo).ToSubList(messagesQuery.Count()));
        }