我正在使用 Xamarin 为我的数据库使用 MongoDB Realm 构建一个应用程序。 Realm 允许您使用基于字符串的查询语言及其公开的 Filter 函数。他们链接了 this NSPredicate 备忘单来帮助指导您如何编写查询。然而,我无法让“IN”查询工作。
在我的代码中,我目前有这个类,我正在尝试查询:
public class Person : RealmObject
{
[PrimaryKey]
public int Id { get; set; }
public string Name { get; set; }
}
我的查询如下所示:
var foundPersons = realm.All<Person>().Filter("Id IN { 1,2 }");
运行时会给出异常: Realms.Exceptions.RealmException: '无效谓词: 'Id IN { 1,2 }': 语法错误,意外的 '{''
我也尝试过不带大括号的查询:
var foundPersons = realm.All<Person>().Filter("Id IN 1,2");
这会给我以下错误:Realms.Exceptions.RealmException:'无效谓词:'Id IN 1,2':语法错误,意外',',期望文件结束'
我尝试过的其他方法是使用 [] 括号和引号,但它们都会给出错误。
如何以正确的方式编写此查询,以便它返回 ID 为 1 或 2 的所有人员?
目前不支持此功能 - 请参阅 Github 上的此讨论。唯一的解决方法是将字符串谓词生成为与
OR
: 组合的多个相等语句
var values = new[] { 1, 2 }; // Or however you get them
var filter = string.Join(" OR ", values.Select(v => $"(Id == {v})"));
var results = Realm.All<Person>().Filter(filter);
我设法将过滤器放入最新的
list
字段中Realm.Net
<PackageReference Include="Realm">
<Version>11.6.1</Version>
</PackageReference>
QueryArgument[] arguments = new QueryArgument[] {"volvo","audi","honda"};
var result = realm.All<Item>().Filter("ANY car == {$0, $1, $2}", arguments);
https://www.mongodb.com/docs/realm/realm-query-language/#query-formats