Невозможно использовать select в операторе linq

Извините, если это глупый вопрос, но я новичок в LINQ. У меня есть служба, которая запрашивает базу данных с помощью Dapper, используя логику async / await. Метод в службе. Я могу использовать SELECT в linq, но в контроллере этот параметр не позволяет мне? У меня есть только ToSelectListItems, а не SELECT .. что мне здесь не хватает?

Услуга:

    public async Task<IEnumerable<AwardWinResult>> GetAwardWinnersAsync(bool useCache = true)
    {
        var data = await awardWinnersRepository.GetWinnersAsync();
        return data;;
    }

Контроллер:

    public async Task<ActionResult> Index()
    {
        var awardWinners = await awardWinnersService.GetAwardWinnersAsync();

        var viewModel = new AwardWinnersWrapperVM
        {
            AwardWinners = await awardWinners.SelectMissingHere?(x => new AwardWinnersViewModel
            {
                AwardId = x.AwardId
            })
        };

        return View(awardWinners);
    }

Репозиторий:

    public async Task<IEnumerable<AwardWinResult>> GetWinnersAsync()
    {
        using (var conn = new System.Data.SqlClient.SqlConnection(Proj.DataContext.ConnectionString))
        {
            await conn.OpenAsync();

            var data = await conn.QueryAsync<AwardWinResult>(@"
                SELECT aw.[WinnerId], aw.[AwardId], aw.[AwardCategoryId] as CategoryId, a.[Name] as AwardName, ac.[Name] as CategoryName, a.[StartDate], a.[EndDate], a.[LaunchDate]
                FROM [Proj].[AwardWinners] aw
                LEFT JOIN [Proj].[AwardCategories] ac on aw.AwardCategoryId = ac.Id
                LEFT JOIN [Proj].[Awards] a on aw.AwardId = a.Id
                LEFT JOIN [Proj].[AwardJurisdictionGroups] ajg on ac.[JurisdictionGroupId] = ajg.[Id]
                LEFT JOIN [Proj].[AwardWorkareaGroups] awg on ac.[WorkareaGroupId] = awg.[Id]
                ");

            return data.ToList();
        }
    }

Посмотреть модель

public class AwardWinnersWrapperVM
{
    public IEnumerable<AwardWinnersViewModel> AwardWinners { get; set; }
}

public class AwardWinnersViewModel
{
    public int WinnerId { get; set; }
    public int AwardId { get; set; }
    public int CategoryId { get; set; }
    public string AwardName { get; set; }
    public string CategoryName { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public DateTime LaunchDate { get; set; }

}

Вы добавили оператор using System.Linq в начало файла контроллера?

JuanR 13.09.2018 20:53
0
1
226
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вам не нужен await в части SelectMissingHere:

public async Task<ActionResult> Index()
{
    var awardWinners = await awardWinnersService.GetAwardWinnersAsync();

    var viewModel = new AwardWinnersWrapperVM
    {
        AwardWinners = awardWinners.Select(x => new AwardWinnersViewModel
        {
            AwardId = x.AwardId
        })
    };

    return View(awardWinners);
}

также можете добавить код AwardWinnersWrapperVM, пожалуйста?

также проверьте наличие директивы using System.Linq в вашем контроллере.

Другие вопросы по теме