Пример #1
0
        public async Task <List <ChatVm> > FindChatsAsync(SearchChatVm template, int limit = 100, long navigationChatId = 0, long?nodeId = null)
        {
            using (MessengerDbContext context = contextFactory.Create())
            {
                IQueryable <Chat> query;
                if (template != null)
                {
                    ExpressionsHelper expressionsHelper = new ExpressionsHelper();
                    query = context.Chats
                            .AsNoTracking()
                            .OrderBy(chat => chat.Id)
                            .Where(expressionsHelper.GetChatExpression(template))
                            .Take(limit);
                }
                else
                {
                    query = context.Chats
                            .AsNoTracking()
                            .OrderBy(chat => chat.Id)
                            .Take(limit);
                }
                if (nodeId != null)
                {
                    query = query.Where(chat => chat.NodesId.Contains(nodeId.Value));
                }
                List <Chat> result = await query
                                     .Where(chat => chat.Deleted == false && chat.Id > navigationChatId && (ChatType)chat.Type != ChatType.Private)
                                     .ToListAsync()
                                     .ConfigureAwait(false);

                return(ChatConverter.GetChatsVm(result));
            }
        }
Пример #2
0
        public Expression <Func <Chat, bool> > GetChatExpression(SearchChatVm templateChat)
        {
            ExpressionStarter <Chat> chatCondition = PredicateBuilder.New <Chat>();

            if (!string.IsNullOrWhiteSpace(templateChat.Name))
            {
                chatCondition = chatCondition.And(chat => chat.Name.ToLower() == templateChat.Name.ToLower());
            }
            if (templateChat.Tag != null)
            {
                chatCondition = chatCondition.And(chat => chat.Tag == templateChat.Tag);
            }
            return((Expression <Func <Chat, bool> >)chatCondition.Expand());
        }