【问题标题】:Can't use select in Linq statement不能在 Linq 语句中使用 select
【发布时间】:2018-09-14 02:54:34
【问题描述】:

对不起,如果这是一个愚蠢的问题,但我是 LINQ 的新手。 我有一个使用 Dapper 使用 async/await 逻辑查询数据库的服务。服务中的方法我可以在 linq 中使用 SELECT 但在控制器中此选项不允许我使用?我只有“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 语句?

标签: c# asynchronous service controller task


【解决方案1】:

看来SelectMissingHere部分不需要await

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 指令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多