OpenAccessDomainService 执行 OQL 查询非常慢

OpenAccessDomainService Executing OQL query is very slow

我在 OpenAccessDomainService 中的 OQL 查询有很大问题。

我有带有 Silverlight 客户端和 RIA Web 服务 (OpenAccessDomainService) 的应用程序,我需要实施延迟加载方法。

例如,我创建了方法 getAnimalsLazy(string stringQuery, int range, int page),我可以在其中传递来自过滤器的 stringQuery、每页和每页的记录。这种方法工作正常,但速度非常慢。

为了比较它,我创建了方法 getAnimals() ,它非常快,它在 ~4 秒内加载 15000 条记录。当我 运行 getAnimalsLazy 时,它会在 ~2 秒内加载 25 条记录。

我不知道我做错了什么,有人可以帮助我吗?

这是示例代码:

[EnableClientAccess()]
public partial class ZooDomainService : OpenAccessDomainService<Model.ZooDomainModel>
{
    public ZooDomainService() : base()
    {
    }


    /// <param name="stringQuery">eg. AND (r.type = "Elephant" OR r.type = "Monkey") ORDER BY r.id ASC</param>
    public IQueryable<Animals> getAnimalsLazy(string stringQuery, int range, int page)
    {
        stringQuery = "SELECT r FROM AnimalsExtent AS r WHERE true " + stringQuery;

        Database db = Database.Get("Connection");
        IObjectScope scope = db.GetObjectScope();
        Query<Animals> qry = scope.GetOqlQuery<Animals>(stringQuery);

        int toSkip = (page - 1) * range;
        qry.Skip = toSkip;
        qry.MaxResultCount = range;

        return qry.ExecuteEnumerable().AsQueryable<Animals>();
    }

    public IQueryable<Animals> getAnimals()
    {
        return this.DataContext.Animals;
    }
}

当我用 this.DataContext.ExecuteQuery(queryString) 重构 getAnimalsLazy 时,我找到了问题的解决方案,一切正常。

string stringQuery = "SELECT * FROM animals AS r WHERE true ORDER BY r.id ASC LIMIT 25 OFFSET 0";
return this.DataContext.ExecuteQuery<Animals>(stringQuery).AsQueryable();