【问题标题】:InvalidOperationException: The LINQ expression could not be translatedInvalidOperationException:无法翻译 LINQ 表达式
【发布时间】:2021-11-27 16:43:25
【问题描述】:

我有这个类,当调用 OnGet 时,它会在从 DB 获取时抛出异常。

代码:

public class DownloadsModel : PageModel
{ 
    [BindProperty(SupportsGet = true)]
    public int Id { get; set; }
    [BindProperty(SupportsGet = true)]
    public string FileType { get; set; }
    private readonly IDbContextFactory<ApplicationDbContext> _dbFactory;

    public DownloadsModel(IDbContextFactory<ApplicationDbContext> dbFactory)
    {
        _dbFactory = dbFactory;
    }

    public async Task<IActionResult> OnGet()
    {           
        var context = _dbFactory.CreateDbContext();            
        
        var file = await context.FileUploads.Select(x => new FileUploadModel
        {
            FileName = x.FileName,
            FileContent = x.FileContent
        }).SingleAsync(x => x.Id == Id);                                

        return File(file.FileContent, FilesConst.DownloadsConst.ApplicationForceDownload, file.FileName);
    }
}

例外:

谁能帮我理解这个问题的根本原因?

问候

【问题讨论】:

    标签: c# linq entity-framework-core


    【解决方案1】:

    所写的查询试图在投影后过滤结果。此外,投影类型 (FileUploadModel) 没有填充 Id 字段,因此它始终是默认值(如果是 int,则为 0)。如果你先过滤然后投影它应该可以工作。

    var file = await context.FileUploads
        .Where(x => x.Id == Id)
        .Select(x => new FileUploadModel
        {
            FileName = x.FileName,
            FileContent = x.FileContent
        })
        .SingleAsync();
    

    【讨论】:

    • 谢谢,它成功了,我以为顺序无关紧要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2022-10-20
    • 2020-09-29
    相关资源
    最近更新 更多