Модель сообщения чата:
public class ChatMessage
{
[Key] public long Id { get; set; }
[Required] public string Content { get; set; }
[Required] public DateTime TimePosted { get; set; }
public string AuthorId { get; set; }
[Required, ForeignKey("authorId")] public ApplicationUser Author { get; set; }
}
Теперь я хочу получить список сообщений чата за определенный день, зная, находится ли их автор в роли «Голос»:
var messages = await dbContext.ChatMessages.AsNoTracking()
.Where(chm => chm.TimePosted.Date == someDateTime.Date).OrderBy(chm => chm.TimePosted)
.ToListAsync();
var result = new List<Tuple<ChatMessage, bool>> { };
foreach(var m in messages)
result.Add(Tuple.Create(m, await userManager.IsInRoleAsync(Author, "Voice")));
Насколько я могу сказать, это отправит в базу данных столько запросов, сколько есть сообщений чата для извлечения , что кажется неприятным, потому что это должно быть сделано только в одном запросе, не так ли ? Или, по крайней мере, постоянное количество запросов, но не линейное.
Я делаю это неправильно? Если да, то как мне это сделать?