相关疑难解决方法(0)

我们可以使用Skip(),Take()和OrderBy()来控制LINQ表达式顺序吗?

我正在使用LINQ to Entities来显示分页结果.但我在使用的组合问题Skip(),Take()OrderBy()调用.

一切正常,除了OrderBy()分配得太晚.之后的结果集已被削减它的执行Skip()Take().

因此,每个结果页面都按顺序排列.但是,对一页数据进行排序,而不是对整个集合进行排序,然后使用Skip()和限制这些记录Take().

如何设置这些语句的优先级?

我的例子(简化)

var query = ctx.EntitySet.Where(/* filter */).OrderByDescending(e => e.ChangedDate);
int total = query.Count();
var result = query.Skip(n).Take(x).ToList();
Run Code Online (Sandbox Code Playgroud)

一种可能(但不好)的解决方案

一种可能的解决方案是将聚簇索引应用于按列排序,但此列经常更改,这会降低插入和更新时的数据库性能.我真的不想那样做.

编辑

我运行ToTraceString()了我的查询,我们实际上可以看到order by应用于结果集.不幸的是最后.:(

SELECT 
-- columns
FROM  (SELECT 
    -- columns
    FROM   (SELECT -- columns
        FROM ( SELECT 
            -- columns
            FROM table1 AS Extent1
            WHERE  EXISTS (SELECT 
                -- single constant column
                FROM table2 AS Extent2
                WHERE (Extent1.ID = …
Run Code Online (Sandbox Code Playgroud)

mysql linq linq-to-entities devart dotconnect

10
推荐指数
1
解决办法
3312
查看次数

标签 统计

devart ×1

dotconnect ×1

linq ×1

linq-to-entities ×1

mysql ×1