有没有办法限制/分页结果集

时间:2015-12-21 22:05:40

标签: sqlite-net-extensions

是否有办法使用GetAllWithChildren()或GetAll()或GetAllWithChildrenAsync()或GetAllAsync()来限制/分页结果集。

这些方法接受过滤表达式,但似乎没有任何直接的方法来设置显式限制器或orderby子句。

1 个答案:

答案 0 :(得分:4)

GetAllWithChildren方法只是一种方便的方法。要执行自定义查询,您必须使用Table方法。使用您希望扩展现有GetAllWithChildren的功能来实现自己的fetch方法应该不难:

public static class OrderExtensions {
    public static List<T> GetAllWithChildren<T>(this SQLiteConnection conn,
            Expression<Func<T, bool>> filter = null,
            Expression<Func<T, object>> orderExpr = null,
            int? limit = null,
            int? offset = null,
            bool recursive = false) where T: class
    {
        var elements = conn.Table<T>();
        if (filter != null) {
            elements = elements.Where(filter);
        }
        if (orderExpr != null) {
            elements = elements.OrderBy(orderExpr);
        }
        if (offset != null) {
            elements = elements.Skip(offset.Value);
        }
        if (limit != null) {
            elements = elements.Take(limit.Value);
        }

        var list = elements.ToList();

        foreach (T element in list)
        {
            conn.GetChildren(element, recursive);
        }

        return list;
    }
}

然后你可以像这样使用它:

    conn.GetAllWithChildren<MyClass>(
            filter: o => o.Name != "",
            orderBy: o => o.Name,
            limit: 10, offset: 20);

或较不详细(且描述性较差)的版本:

    conn.GetAllWithChildren<MyClass>(o => o.Name != "", o => o.Name, 10, 20);