【发布时间】:2020-12-11 19:50:43
【问题描述】:
当我尝试在 Linq 查询中使用 select 并在 select 语句中创建视图模型时,它可以工作。当我尝试将视图模型的创建提取到静态方法时,会出现以下错误:“无法翻译。要么以可翻译的形式重写查询”。为什么会这样?
调用 SiteViewModel.GetSiteViewModel(s) 会产生此错误。
public async Task<IEnumerable<ContractViewModel>> ExecuteAsync(CancellationToken token = new CancellationToken())
{
var contracts = await _domainContext.Contracts.Include(s => s.Sites)
.AuthorizedFor(User)
.Select(c => new ContractViewModel()
{
CreationDate = c.CreationDate,
ContractId = c.Id,
ContractLineWiatingForConfirmation = c.ContractLines.Any(l => l.Status == ContractLineStatus.WaitingForConfirmation),
ModificationDate = c.ModificationDate,
ExpirationDate = c.ExpirationDate,
Title = c.Title,
Status = c.Status,
Sites = c.Sites.Select(s => SiteViewModel.GetSiteViewModel(s)).OrderBy(s => s.SiteName)
})
.ToListAsync(token);
return contracts;
}
GetSiteViewModel 如下所示:
public static SiteViewModel GetSiteViewModel(ContractSite x)
{
return new SiteViewModel
{
SiteId = x.Site.Id,
SiteCode = x.Site.Code,
SiteName = x.Site.Name,
AgressoCode = x.Site?.ExternalReference?.Identifier,
AgressoAdministration = x.Site?.ExternalReference?.Source
};
}
更新:
当我删除 orderby 时,它可以工作。当我删除创建视图模型的静态方法,并将视图模型的创建放在查询本身中并且不要删除 orderby 时,它也可以工作......
【问题讨论】:
标签: linq asp.net-core entity-framework-core