private Task <ChatVisitModel[]> GetChatVisits(ChatsFilter model) { var relationsInitQuery = Query <EccChatUserRelation>() .Where(x => x.UserId == UserId) .Where(x => x.Chat.IsSystem == model.IsSystem && x.Chat.IsDialog == model.IsDialog); if (!string.IsNullOrWhiteSpace(model.Type)) { relationsInitQuery = relationsInitQuery.Where(x => x.Chat.Type == model.Type); } return(relationsInitQuery .Select(t => new ChatVisitModel { ChatId = t.ChatId, LastVisitUtcTicks = t.LastVisitUtcTicks, CountOfUnread = t.Chat.Messages.Count(z => z.SentOnUtcTicks > t.LastVisitUtcTicks && z.SenderUserId != UserId) }) .ToArrayAsync()); }
/// <summary> /// Получить список непрочитанных сообщений /// </summary> /// <returns></returns> public async Task <int> GetCountOfUnreadMessages(ChatsFilter model) { var chatRels = await GetChatVisits(model); return(chatRels.Sum(x => x.CountOfUnread)); }