Как сделать запрос, так чтобы выборка проходила на стороне SQL сервера? - C#

Узнай цену своей работы

Формулировка задачи:

Помогите переделать запрос, так чтобы не грузились все данные:
    IAsyncEnumerable<MessageInfo> message = _context.MessageInfos.Where(mes => !mes.IsLine)
        .Include(c => c.Coordinates)
        .Include(d => d.DateAddObject)
 
        .ToAsyncEnumerable()
        .Where(d => d.DateAddObject.Date.Date == dateTime.Date);
Но как эту часть: .ToAsyncEnumerable().Where... переделать в запрос SQL? Если сделаю так, то будет ошибка:
IQueryable<MessageInfo> message = _context.MessageInfos.Where(mes => !mes.IsLine)
    .Include(c => c.Coordinates)
    .Include(d => d.DateAddObject)
 
    .Where(d => d.DateAddObject.Date.Date == dateTime.Date);
 
if (message != null)
{
    List<HomeIndexViewModel> homeIndexViewModel = new List<HomeIndexViewModel>();
 
    await (message
    .AsNoTracking())
    .ForEachAsync(mes =>
    {
        if (mes != null)
            homeIndexViewModel.Add(new HomeIndexViewModel
            {
                MarkerMessageId = mes.MessageInfoId,
                Latitude = mes.Coordinates.First().Latitude,
                Longitude = mes.Coordinates.First().Longitude,
                Title = mes.Title
            });
    });
 
    return Json(homeIndexViewModel);
}
if (_context != null && DateTime.TryParse(date, out DateTime dateTime))
{
    IAsyncEnumerable<MessageInfo> message = _context.MessageInfos.Where(mes => !mes.IsLine)
        .Include(c => c.Coordinates)
        .Include(d => d.DateAddObject)
 
        .ToAsyncEnumerable()
        .Where(d => d.DateAddObject.Date.Date == dateTime.Date);
 
    if (message != null)
    {
        List<HomeIndexViewModel> homeIndexViewModel = new List<HomeIndexViewModel>();
 
        await (message)
            .ForEachAsync(mes =>
            {
                if (mes != null)
                    homeIndexViewModel.Add(new HomeIndexViewModel
                    {
                        MarkerMessageId = mes.MessageInfoId,
                        Latitude = mes.Coordinates.First().Latitude,
                        Longitude = mes.Coordinates.First().Longitude,
                        Title = mes.Title
                    });
            });
 
        return Json(homeIndexViewModel);
    }
}

Решение задачи: «Как сделать запрос, так чтобы выборка проходила на стороне SQL сервера?»

textual
Листинг программы
DateTime? begin = beginDate;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы