CollectionExtensions 类
一组扩展方法,通过collection公开与通知相关的功能。
命名空间: Realms
程序集:Realm.dll
语法
public static class CollectionExtensions
方法
| 编辑本页 查看源代码AsRealmCollection<T>(IDictionary<string, T>)
一种便捷方法,用于将 IDictionary<TKey, TValue> 转换为实现 INotifyCollectionChanged<T> 的 IRealmCollection 。
声明
public static IRealmCollection<KeyValuePair<string, T>> AsRealmCollection<T>(this IDictionary<string, T> dictionary)
参数
类型 | 名称 | 说明 |
---|---|---|
IDictionary < string , T> | 字典 | 要观察更改的IDictionary<TKey, TValue> 。 |
返回:
类型 | 说明 |
---|---|
IRealmCollection < KeyValuePair < string , T>> | collection,实施INotifyCollectionChanged 。 |
类型参数
名称 | 说明 |
---|---|
t | 字典中元素的类型。 |
另请参阅
| 编辑本页 查看源代码AsRealmCollection<T>(IList<T>)
一种便捷方法,可将 IList<T> 转换为实现 INotifyCollectionChanged<T> 的 IRealmCollection 。
声明
public static IRealmCollection<T> AsRealmCollection<T>(this IList<T> list)
参数
类型 | 名称 | 说明 |
---|---|---|
IList <T> | 名单 | 要观察更改的IList<T> 。 |
返回:
类型 | 说明 |
---|---|
IRealmCollection <T> | collection,实施INotifyCollectionChanged 。 |
类型参数
名称 | 说明 |
---|---|
t | 列表中元素的类型。 |
另请参阅
| 编辑本页 查看源代码AsRealmCollection<T>(ISet<T>)
一种便捷方法,可将 ISet<T> 转换为实现 INotifyCollectionChanged<T> 的 IRealmCollection 。
声明
public static IRealmCollection<T> AsRealmCollection<T>(this ISet<T> set)
参数
类型 | 名称 | 说明 |
---|---|---|
ISet <T> | 集 | 要观察更改的ISet<T> 。 |
返回:
类型 | 说明 |
---|---|
IRealmCollection <T> | collection,实施INotifyCollectionChanged 。 |
类型参数
名称 | 说明 |
---|---|
t | 集合中元素的类型。 |
另请参阅
| 编辑本页 查看源代码AsRealmCollection<T>(IQueryable<T>)
一种便捷方法,用于将 IQueryable<T> 转换为实现 INotifyCollectionChanged<T> 的 IRealmCollection 。
声明
public static IRealmCollection<T> AsRealmCollection<T>(this IQueryable<T> query) where T : IRealmObjectBase?
参数
类型 | 名称 | 说明 |
---|---|---|
IQueryable <T> | 查询 | 要观察更改的IQueryable<T> 。 |
返回:
类型 | 说明 |
---|---|
IRealmCollection <T> | collection,实施INotifyCollectionChanged 。 |
类型参数
名称 | 说明 |
---|---|
t | 结果中RealmObject或EmbeddedObject的类型。 |
另请参阅
| 编辑本页 查看源代码AsRealmQueryable<T>(IDictionary<string, T?>)
将 Realm 支持的IDictionary<TKey, TValue>转换为 Realm 支持的字典值IQueryable<T> 。
声明
public static IQueryable<T> AsRealmQueryable<T>(this IDictionary<string, T?> dictionary) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
IDictionary < string , T> | 字典 | 从对多关系属性中获取的对象字典。 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 表示字典中包含的值的可查询collection。 |
类型参数
名称 | 说明 |
---|---|
t | 字典中包含的值的类型。 |
备注
此方法的工作方式与AsQueryable(IEnumerable)不同,因为它只返回值的collection,而不是KeyValuePair<TKey, TValue>的collection,并且实际上会创建一个表示字典值的底层 Realm 查询。这意味着所有 LINQ 方法都将由数据库执行,并且即使在应用 LINQ 筛选器或排序后,您也可以订阅通知。
示例
var query = owner.DictOfDogs.AsRealmQueryable()
.Where(d => d.Age > 3)
.OrderBy(d => d.Name);
var token = query.SubscribeForNotifications((sender, changes, error) =>
{
// You'll be notified only when dogs older than 3 have been added/removed/updated
// and the sender collection will be ordered by Name
});
异常
类型 | 条件 |
---|---|
ArgumentException | 如果字典不是由 Realm 托管,则抛出该异常。 |
AsRealmQueryable<T>(IList<T>)
将 Realm 支持的IList<T>转换为 Realm 支持的IQueryable<T> 。
声明
public static IQueryable<T> AsRealmQueryable<T>(this IList<T> list) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
IList <T> | 名单 | 从对多关系属性中获取的对象列表。 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 表示列表中包含的对象的可查询collection。 |
类型参数
名称 | 说明 |
---|---|
t | 列表中包含的对象的类型。 |
备注
此方法的工作方式与AsQueryable(IEnumerable)不同,因为它实际上会创建一个底层 Realm 查询来表示列表。 这意味着所有 LINQ 方法都将由数据库执行,并且即使在应用 LINQ 筛选器或排序后,您也可以订阅通知。
示例
var dogs = owner.Dogs;
var query = dogs.AsRealmQueryable()
.Where(d => d.Age > 3)
.OrderBy(d => d.Name);
var token = query.SubscribeForNotifications((sender, changes, error) =>
{
// You'll be notified only when dogs older than 3 have been added/removed/updated
// and the sender collection will be ordered by Name
});
异常
类型 | 条件 |
---|---|
ArgumentException | 如果列表不是由 Realm 托管,则抛出该异常。 |
AsRealmQueryable<T>(ISet<T>)
将 Realm 支持的ISet<T>转换为 Realm 支持的IQueryable<T> 。
声明
public static IQueryable<T> AsRealmQueryable<T>(this ISet<T> set) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
ISet <T> | 集 | 从对多关系属性中获取的对象集。 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 一个可查询的collection,表示该集中包含的对象。 |
类型参数
名称 | 说明 |
---|---|
t | 该集中包含的对象的类型。 |
备注
此方法与AsQueryable(IEnumerable)的工作方式不同,因为它实际上会创建一个底层 Realm 查询来表示该集合。 这意味着所有 LINQ 方法都将由数据库执行,并且即使在应用 LINQ 筛选器或排序后,您也可以订阅通知。
示例
var dogs = owner.Dogs;
var query = dogs.AsRealmQueryable()
.Where(d => d.Age > 3)
.OrderBy(d => d.Name);
var token = query.SubscribeForNotifications((sender, changes, error) =>
{
// You'll be notified only when dogs older than 3 have been added/removed/updated
// and the sender collection will be ordered by Name
});
异常
类型 | 条件 |
---|---|
ArgumentException | 如果列表不是由 Realm 托管,则抛出该异常。 |
Filter<T>(IDictionary<string, T?>, string, params QueryArgument[])
对字典的值应用基于 NSPredicate 的过滤器。 它可用于创建 LINQ 提供商当前不支持的更复杂的查询,并且除了筛选之外还支持 SORT 和 DISTINCT 子句。
声明
public static IQueryable<T> Filter<T>(this IDictionary<string, T?> dictionary, string predicate, params QueryArgument[] arguments) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
IDictionary < string , T> | 字典 | Realm 字典。 |
字符串 | 谓词 | 将应用的谓词。 |
QueryArgument [] | arguments | 用于在谓词中进行替换的值。 请注意,所有基元类型都会被接受,因为它们会隐式转换为 RealmValue。 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 与谓词匹配的字典值的 Queryable Observable collection。 |
类型参数
名称 | 说明 |
---|---|
t | 将过滤的字典值的类型。 |
备注
如果不打算应用其他筛选器,建议在应用谓词后使用AsRealmCollection<T>(IQueryable<T>) 。
示例
joe.DictOfDogs.Filter("Name BEGINSWITH $0", "R");
另请参阅
| 编辑本页 查看源代码Filter<T>(IList<T>, string, params QueryArgument[])
在collection上应用基于 NSPredicate 的筛选器。它可用于创建 LINQ 提供商当前不支持的更复杂的查询,并且除了筛选之外还支持 SORT 和 DISTINCT 子句。
声明
public static IQueryable<T> Filter<T>(this IList<T> list, string predicate, params QueryArgument[] arguments) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
IList <T> | 名单 | Realm 列表。 |
字符串 | 谓词 | 将应用的谓词。 |
QueryArgument [] | arguments | 用于在谓词中进行替换的值。 请注意,所有基元类型都会被接受,因为它们会隐式转换为 RealmValue。 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 与谓词匹配的对象的 Queryable Observable collection。 |
类型参数
名称 | 说明 |
---|---|
t | 将过滤的对象的类型。 |
备注
如果不打算应用其他筛选器,建议在应用谓词后使用AsRealmCollection<T>(IQueryable<T>) 。
示例
var joe = realm.All<Person>().Single(p => p.Name == "Joe");
joe.dogs.Filter("Name BEGINSWITH $0", "R");
另请参阅
| 编辑本页 查看源代码Filter<T>(ISet<T>, string, params QueryArgument[])
在collection上应用基于 NSPredicate 的筛选器。它可用于创建 LINQ 提供商当前不支持的更复杂的查询,并且除了筛选之外还支持 SORT 和 DISTINCT 子句。
声明
public static IQueryable<T> Filter<T>(this ISet<T> set, string predicate, params QueryArgument[] arguments) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
ISet <T> | 集 | Realm 集。 |
字符串 | 谓词 | 将应用的谓词。 |
QueryArgument [] | arguments | 用于在谓词中进行替换的值。 请注意,所有基元类型都会被接受,因为它们会隐式转换为 RealmValue。 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 与谓词匹配的对象的 Queryable Observable collection。 |
类型参数
名称 | 说明 |
---|---|
t | 将过滤的对象的类型。 |
备注
如果不打算应用其他筛选器,建议在应用谓词后使用AsRealmCollection<T>(IQueryable<T>) 。
示例
var joe = realm.All<Person>().Single(p => p.Name == "Joe");
joe.dogs.Filter("Name BEGINSWITH $0", "R");
另请参阅
| 编辑本页 查看源代码Filter<T>(IQueryable<T>, string, params QueryArgument[])
在collection上应用基于 NSPredicate 的筛选器。它可用于创建 LINQ 提供商当前不支持的更复杂的查询,并且除了筛选之外还支持 SORT 和 DISTINCT 子句。
声明
public static IQueryable<T> Filter<T>(this IQueryable<T> query, string predicate, params QueryArgument[] arguments)
参数
类型 | 名称 | 说明 |
---|---|---|
IQueryable <T> | 查询 | 一个可查询集合,通过调用All<T>()获得。 |
字符串 | 谓词 | 将应用的谓词。 |
QueryArgument [] | arguments | 用于在谓词中进行替换的值。 请注意,所有基元类型都会被接受,因为它们会隐式转换为 RealmValue。 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 与谓词匹配的对象的 Queryable Observable collection。 |
类型参数
名称 | 说明 |
---|---|
t | 将过滤的对象的类型。 |
备注
如果不打算应用其他筛选器,建议在应用谓词后使用AsRealmCollection<T>(IQueryable<T>) 。
示例
var results1 = realm.All<Foo>("Bar.IntValue > 0");
var results2 = realm.All<Foo>("Bar.IntValue > 0 SORT(Bar.IntValue ASC Bar.StringValue DESC)");
var results3 = realm.All<Foo>("Bar.IntValue > 0 SORT(Bar.IntValue ASC Bar.StringValue DESC) DISTINCT(Bar.IntValue)");
var results4 = realm.All<Foo>("Bar.IntValue > $0 || (Bar.String == $1 && Bar.Bool == $2)", 5, "small", true);
另请参阅
| 编辑本页 查看源代码Move<T>(IList<T>, int, int)
将指定项目移动到列表中的新位置。
声明
public static void Move<T>(this IList<T> list, int from, int to)
参数
类型 | 名称 | 说明 |
---|---|---|
IList <T> | 名单 | 应发生移动的列表。 |
int | from | 将移动的项目的索引。 |
int | to | 项目将移动到的新位置。 |
类型参数
名称 | 说明 |
---|---|
t | 列表中对象的类型。 |
备注
此扩展方法也适用于独立运行的实例列表,方法是先调用RemoveAt(int) ,然后调用Insert(int, T) 。
异常
类型 | 条件 |
---|---|
ArgumentOutOfRangeException | 如果索引小于 0 或大于Count - 1,则抛出该异常。 |
Move<T>(IList<T>, T, int)
将指定项目移动到列表中的新位置。
声明
public static void Move<T>(this IList<T> list, T item, int index)
参数
类型 | 名称 | 说明 |
---|---|---|
IList <T> | 名单 | 应发生移动的列表。 |
t | 列项 | 将移动的项目。 |
int | 索引(index) | 项目将移动到的新位置。 |
类型参数
名称 | 说明 |
---|---|
t | 列表中对象的类型。 |
备注
此扩展方法也适用于独立运行的实例列表,方法是先调用Remove(T) ,然后调用Insert(int, T) 。
异常
类型 | 条件 |
---|---|
ArgumentOutOfRangeException | 如果索引小于 0 或大于Count - 1,则抛出该异常。 |
SubscribeAsync<T>(IQueryable<T>, SubscriptionOptions?, WaitForSyncMode, CancellationToken?)
将查询添加到活动的 Flexible Sync 订阅集。 该查询将通过 OR 语句与同一类型的任何现有查询连接。
声明
public static Task<IQueryable<T>> SubscribeAsync<T>(this IQueryable<T> query, SubscriptionOptions? options = null, WaitForSyncMode waitForSync = WaitForSyncMode.FirstTime, CancellationToken? cancellationToken = null) where T : IRealmObject
参数
类型 | 名称 | 说明 |
---|---|---|
IQueryable <T> | 查询 | 将在服务器上匹配的查询。 |
SubscriptionOptions | 选项 | 控制将要执行的插入操作的名称和/或类型的订阅选项。 |
WaitForSyncMode | waitForSync | 控制此方法何时应异步等待服务器发送与订阅匹配的对象的参数。 |
CancelationToken ? | cancelledToken | 可选取消令牌,用于取消等待与服务器同步。 请注意,取消操作只会取消等待本身,而不会取消实际的订阅,因此即使取消任务,也会添加订阅。 若要删除订阅,可以使用Remove<T>(IQueryable<T>, bool) 。 |
返回:
类型 | 说明 |
---|---|
任务< IQueryable <T>> | 添加到订阅集后的原始查询。 |
类型参数
名称 | 说明 |
---|---|
t | 查询结果中的对象类型。 |
备注
添加已存在的查询属于无需操作。
此方法大致相当于先调用Add<T>(IQueryable<T>, SubscriptionOptions?) ,然后调用WaitForSynchronizationAsync(CancellationToken?) 。
另请参阅
| 编辑本页 查看源代码SubscribeForKeyNotifications<T>(IDictionary<string, T>,DictionaryNotificationCallbackDelegate<T>)
一种便捷方法,用于将IDictionary<TKey, TValue>转换为IRealmCollection<T>并订阅键更改通知。
声明
public static IDisposable SubscribeForKeyNotifications<T>(this IDictionary<string, T> dictionary, DictionaryNotificationCallbackDelegate<T> callback)
参数
类型 | 名称 | 说明 |
---|---|---|
IDictionary < string , T> | 字典 | 要观察更改的IDictionary<TKey, TValue> 。 |
DictionaryNotificationCallbackDelegate <T> | callback | 使用更新后的IRealmCollection<T>调用的回调。 |
返回:
类型 | 说明 |
---|---|
IDisposable | 订阅令牌。 只要您想接收变更通知,它就必须保持活动状态。 要停止接收通知,请调用Dispose() 。 |
类型参数
名称 | 说明 |
---|---|
t | 字典中元素的类型。 |
另请参阅
| 编辑本页 查看源代码SubscribeForNotifications<T>(IDictionary<string, T>,NotificationCallbackDelegate<KeyValuePair<string, T>>, KeyPathsCollection?)
一种便捷方法,用于将IDictionary<TKey, TValue>转换为IRealmCollection<T>并订阅变更通知。
声明
public static IDisposable SubscribeForNotifications<T>(this IDictionary<string, T> dictionary, NotificationCallbackDelegate<KeyValuePair<string, T>> callback, KeyPathsCollection? keyPathsCollection = null)
参数
类型 | 名称 | 说明 |
---|---|---|
IDictionary < string , T> | 字典 | 要观察更改的IDictionary<TKey, TValue> 。 |
notificationCallbackDelegate < KeyValuePair < string , T>> | callback | 使用更新后的IRealmCollection<T>调用的回调。 |
KeyPathsCollection | keyPathsCollection | 一个可选的KeyPathsCollection ,指示属性中的哪些更改应引发通知。 |
返回:
类型 | 说明 |
---|---|
IDisposable | 订阅令牌。 只要您想接收变更通知,它就必须保持活动状态。 要停止接收通知,请调用Dispose() 。 |
类型参数
名称 | 说明 |
---|---|
t | 字典中元素的类型。 |
另请参阅
| 编辑本页 查看源代码SubscribeForNotifications<T>(IList<T>,NotificationCallbackDelegate<T>, KeyPathsCollection?)
一种便捷方法,用于将IList<T>转换为IRealmCollection<T>并订阅变更通知。
声明
public static IDisposable SubscribeForNotifications<T>(this IList<T> list, NotificationCallbackDelegate<T> callback, KeyPathsCollection? keyPathsCollection = null)
参数
类型 | 名称 | 说明 |
---|---|---|
IList <T> | 名单 | 要观察更改的IList<T> 。 |
notificationCallbackDelegate <T> | callback | 使用更新后的IRealmCollection<T>调用的回调。 |
KeyPathsCollection | keyPathsCollection | 一个可选的KeyPathsCollection ,指示属性中的哪些更改应引发通知。 |
返回:
类型 | 说明 |
---|---|
IDisposable | 订阅令牌。 只要您想接收变更通知,它就必须保持活动状态。 要停止接收通知,请调用Dispose() 。 |
类型参数
名称 | 说明 |
---|---|
t | 列表中元素的类型。 |
另请参阅
| 编辑本页 查看源代码SubscribeForNotifications<T>(ISet<T>,NotificationCallbackDelegate<T>, KeyPathsCollection?)
一种便捷方法,用于将ISet<T>转换为IRealmCollection<T>并订阅变更通知。
声明
public static IDisposable SubscribeForNotifications<T>(this ISet<T> set, NotificationCallbackDelegate<T> callback, KeyPathsCollection? keyPathsCollection = null)
参数
类型 | 名称 | 说明 |
---|---|---|
ISet <T> | 集 | 要观察更改的ISet<T> 。 |
notificationCallbackDelegate <T> | callback | 使用更新后的IRealmCollection<T>调用的回调。 |
KeyPathsCollection | keyPathsCollection | 一个可选的KeyPathsCollection ,指示属性中的哪些更改应引发通知。 |
返回:
类型 | 说明 |
---|---|
IDisposable | 订阅令牌。 只要您想接收变更通知,它就必须保持活动状态。 要停止接收通知,请调用Dispose() 。 |
类型参数
名称 | 说明 |
---|---|
t | 集合中元素的类型。 |
另请参阅
| 编辑本页 查看源代码SubscribeForNotifications<T>(IQueryable<T>,NotificationCallbackDelegate<T>, KeyPathsCollection?)
一种便捷方法,用于将IQueryable<T>转换为IRealmCollection<T>并订阅变更通知。
声明
public static IDisposable SubscribeForNotifications<T>(this IQueryable<T> results, NotificationCallbackDelegate<T> callback, KeyPathsCollection? keyPathsCollection = null) where T : IRealmObjectBase?
参数
类型 | 名称 | 说明 |
---|---|---|
IQueryable <T> | 结果 | 要观察更改的IQueryable<T> 。 |
notificationCallbackDelegate <T> | callback | 使用更新后的IRealmCollection<T>调用的回调。 |
KeyPathsCollection | keyPathsCollection | 一个可选的KeyPathsCollection ,指示属性中的哪些更改应引发通知。 |
返回:
类型 | 说明 |
---|---|
IDisposable | 订阅令牌。 只要您想接收变更通知,它就必须保持活动状态。 要停止接收通知,请调用Dispose() 。 |
类型参数
名称 | 说明 |
---|---|
t | 结果中RealmObject或EmbeddedObject的类型。 |