EF 6至EF Core 2.2将IQueriable linq更改为SQL Skip and Take行为

时间:2019-11-22 02:29:54

标签: entity-framework-core entity-framework-core-2.2

我正在将应用程序从.Net Framework 4.6.1迁移到.Net Core 2.2,并且某些linq到SQL查询没有按预期的方式迁移。

当我将跳过和获取方法应用于IQueriable时,它们不适用于SQL

return query
    .AsNoTracking()
    .Skip(skip)
    .Take(take)
    .ToList();

SQL查询转换为

SELECT {query} ... 
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY

代替注入实际值,它留下未填充的参数引用,并返回整个结果集。

我曾尝试用OrderBy()更新IQueriable,并在请求IEnumerable之前添加Skip()和Take(),如其他帖子中所建议的那样,

有任何线索吗?

================编辑=================

不良的表现似乎不是跳过/采用用法,而是子句的连接方式。

而不是做一个 WHERE {clause 1} AND {clause 2}与EF6一样,会产生一系列WHERE ((CASE WHEN {clause} THEN CAST (1 AS BIT) ELSE CAST (0 AS BIT) END | CASE WHEN {clause 2},并且效果不佳。

0 个答案:

没有答案