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