LINQ查询在Dot-Net Core 2.2中运行良好,但在3.1中运行良好



下面的LINQ查询在Dot Net Core 2.2中按预期工作,但当我升级到3.1时,它抛出运行时执行。

[HttpGet("{SINo}")]
public async Task<IEnumerable<dynamic>> SaleHistory(string SINo)
{
return await (from s in _context.Sales
where s.saleInvNo.Contains("|")
? s.saleInvNo.Split("|", StringSplitOptions.None)[1] == SINo
: s.saleInvNo == SINo
select new
{
s.saleDate,
s.saleInvNo
}).ToListAsync();
}
无法翻译

。以可以被翻译,或通过插入显式切换到客户端评估对AsEnumerable((、AsAsyncEnumerable((、ToList((的调用,或ToListAsync((

如何更改此可翻译查询?

注:销售额表有大约100万条记录。除此之外,我只想得到一张唱片。

string.Split在LINQ to Entities中不受支持。因此,您需要将SubstringIndexOf一起使用,如下所示。

用途:

s.saleInvNo.Substring(s.saleInvNo.IndexOf("|") + 1) == SINo

代替:

s.saleInvNo.Split("|", StringSplitOptions.None)[1] == SINo

请参阅:从实体框架中剥离嵌套

顺便说一句,你应该考虑@DavidG建议:

同时查看此查询,我强烈建议您将此数据标准化将"SINNo"值拆分为自己的列-没有什么了不起的查询这种类型的数据的方法

相关内容

最新更新