Создание асинхронного метода, содержащего запрос linq - PullRequest
0 голосов
/ 09 июля 2019

У меня есть веб-приложение .Net Core 2.2, которое использует Entity Framework.

В проекте у меня есть этот контроллер, который использует Linq для объединения двух таблиц, а затем использует Select для создания модели узла, напримерэто:

    [HttpGet("GameDownloadLinks/{libraryId}")]
    public async Task<ActionResult<IEnumerable<GameDownloadLinks>>> GetGameLinksForlibraryAsync(Guid libraryID)
    {
        var libraryGameLinks =  (from gk in _context.GameLinks
                                   join gl in _context.GameList on gk.GameId equals gl.GameId
                                   where gl.libraryId == libraryId
                                   select new GameDownloadLinks
                                   {
                                       LibraryId = gl.libraryId,
                                       LinkText = gk.LinkText,
                                       Price = gk.Price,
                                       GameId = gl.GameId
                                   }).ToList();

        var asyncGameDownloadLinks = await Task.WhenAll(libraryGameLinks).toListAsync();
        return asyncGameDownloadLinks;
    }

Я пытаюсь сделать этот метод асинхронным, но я получаю эту ошибку:

cannot convert from 'System.Collections.Generic.List<Models.GameDownloadLinks>'  to 'System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task>'

Некоторые ответы, которые я нашел на похожие вопросы, указывают, что это наиболее вероятноиз-за отсутствующего ключевого слова async в объявлении метода, но я включил его в мое.

Есть ли способ заставить это работать?

Спасибо!

1 Ответ

3 голосов
/ 09 июля 2019

попробуйте

  [HttpGet("GameDownloadLinks/{libraryId}")]
    public async Task<ActionResult<IEnumerable<GameDownloadLinks>>> GetGameLinksForlibraryAsync(Guid libraryID)
    {
        var libraryGameLinks = await (from gk in _context.GameLinks
                                   join gl in _context.GameList on gk.GameId equals gl.GameId
                                   where gl.libraryId == libraryId
                                   select new GameDownloadLinks
                                   {
                                       LibraryId = gl.libraryId,
                                       LinkText = gk.LinkText,
                                       Price = gk.Price,
                                       GameId = gl.GameId
                                   }).ToListAsync();

       // var asyncGameDownloadLinks = await Task.WhenAll(libraryGameLinks).toListAsync();
        return libraryGameLinks ;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...