Не могу использовать select в операторе Linq - PullRequest
0 голосов
/ 13 сентября 2018

Извините, если это глупый вопрос, но я новичок в 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);
    }

Repository:

    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; }

}

1 Ответ

0 голосов
/ 13 сентября 2018

Кажется, вам не нужно 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 в вашем контроллере.

...