下面的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中不受支持。因此,您需要将Substring
和IndexOf
一起使用,如下所示。
用途:
s.saleInvNo.Substring(s.saleInvNo.IndexOf("|") + 1) == SINo
代替:
s.saleInvNo.Split("|", StringSplitOptions.None)[1] == SINo
请参阅:从实体框架中剥离嵌套
顺便说一句,你应该考虑@DavidG建议:
同时查看此查询,我强烈建议您将此数据标准化将"SINNo"值拆分为自己的列-没有什么了不起的查询这种类型的数据的方法