使用 "IN" 关键字在 Realm .NET 中编写过滤器查询的正确语法是什么

What is the correct syntax to write a Filter query in Realm .NET using the "IN" keyword

我正在为我的数据库使用 MongoDB Realm 使用 Xamarin 构建一个应用程序。 Realm 允许您使用基于字符串的查询语言和它们公开的 Filter 函数。他们 link this NSPredicate 欺骗 sheet 来帮助指导您如何编写查询。但是,我无法使“IN”查询正常工作。

在我的代码中,我目前有这个 class,我正在尝试查询:

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: 'Invalid predicate: 'Id IN { 1,2 }': syntax error, unexpected '{''

我也试过不带花括号的查询:

var foundPersons = realm.All<Person>().Filter("Id IN 1,2");

这将给我以下错误:Realms.Exceptions.RealmException:'无效谓词:'Id IN 1,2':语法错误,意外的',',预期文件结束'

我试过的其他方法是使用 [] 括号和引号,但它们都会出错。

如何以正确的方式编写此查询,以便 return 所有 ID 为 1 或 2 的人?

目前不支持 - 请参阅 Github 上的 this discussion。唯一的解决方法是将字符串谓词生成为多个等式语句并结合 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);