ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## ITraversable 该ITraversable接口表示能够被查询的一系列值。这是所有查询对象的基本接口,它支持以下方法: ### 查询 * where - 根据指定的谓词过滤值 * orderBy[Ascending|Descending]->thenBy[Ascending|Descending]... - 根据指定的排序函数和方向对值进行排序 * skip - 跳过指定的值 * take - 根据供应量限制值的数量 * slice - 根据指定的偏移量和数量检索一段值 * indexBy - 根据指定的映射函数对值进行索引 * keys - 获取键作为值 * reindex - 根据其基于0的位置索引值 * groupBy - 根据指定的分组函数对值进行分组 * join->on/onEquality[->withDefault]->to - 根据指定的过滤器将值与所指定的值进行匹配,然后根据指定的功能将投影结果 * groupJoin->on/onEquality[->withDefault]->to - 根据指定的过滤器将值与提供的值进行匹配,对结果进行分组,然后根据指定的函数进行投影 * unique - 仅返回唯一值 * select - 根据指定的函数映射值 * selectMany - 根据提供的函数映射值并合并结果 * first - 返回第一个值,如果为空则返回null * last - 返回最后一个值,如果为空则返回null * contains - 如果指定的值存在于中集合中,则返回 * offsetGet - 返回指定的索引处的值 * offsetExists - 指定的索引是否存在值 ### 聚集 * count - 元素的数量 * isEmpty - 是否没有元素 * aggregate - 根据指定的函数聚合值 * maximum - 最大值 * minimum - 最小值 * sum - 所有值的总和 * average - 所有值的平均值 * all - 是否所有值都为true * any - 是否有任何值计算为true * implode - 用指定的分隔符连接所有值 ### 集合/列表操作 * append - 将指定的元素追加到数据源 * whereIn - 所有值都存在于数据源和指定的值中 * except - 从数据源中移除指定的元素 * union - 数据源或指定的值中存在的唯一值 * intersect - 数据源和提指定的值中都有唯一值 * difference - 唯一值存在于 数据源中但不在指定的值中 ### 其他 * getIterator - 以迭代器的形式获取元素,将非标量键映射到整数 * getTrueIterator - 以迭代器的形式获取元素 * asArray - 将元素转换为数组。非标量键将被映射到整数 * asTraversable - 将元素转换为一个 ITraversable实例 * asCollection - 将元素转换为一个 ICollection实例 ## ICollection 该ICollection接口表示一系列可变的值,它们可以使用以下方法进行操作和更改: * apply - 为每一项值应用指定函数 * groupJoin->on/onEquality[->withDefault]->apply - 根据指定的过滤器将值与指定的值进行匹配,然后使用指定的函数进行结果的分析。 * addRange - 将一组值添加到集合中 * remove - 从集合中删除所有出现的值 * removeRange - 从集合中删除所有出现的一组值 * removeWhere - 根据提供的谓词功能删除值 * clear - 从集合中删除所有值。 * offsetSet - 将值设置为提供的索引 * offsetUnset - 删除指定的索引中的任何值 ## IQueryable 该IQueryable接口代表的是另一个版本的ITraversable接口。它提供了和ITraversable相同的API,但通过使用IQueryProvider,它支持查询外部数据源。 ## IRepository 该IRepository接口代表的是另一个版本的ICollection接口。它提供了和 ICollection相同的API,但通过使用IRepositoryProvider,它支持查询和改变外部数据源。 ## 限制 * 在查询中,不应该使用控制结构,例如if, switch, goto, while, foreach,...,这些控制结构不被归类为有效的查询表达式,不能与外部数据源一起使用。 * 像下面这样在同一行上定义多个相同的查询函数,将会抛出异常。因为无法明确到底要应用哪个函数: ~~~ $queryable->where(function ($i) { return $i > 50; })->where(function ($i) { return $i !== 70; }); ~~~ ## 标准类 在API旁边,是实现PINQ每个接口的一组标准。如果您需要为PINQ API添加自定义功能,则应扩展这些类,因为它们包含标准API 的正确测试实现。 提供以下类型: ~~~ Traversable implements ITraversable Collection implements ICollection Queryable implements IQueryable Repository implements IRepository ~~~