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

问题描述 投票:0回答:2

我正在使用 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 的所有人员?

c# .net xamarin xamarin.forms realm
2个回答
3
投票

目前不支持此功能 - 请参阅 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);

0
投票

我设法将过滤器放入最新的

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

© www.soinside.com 2019 - 2024. All rights reserved.