Hazelcast C# 客户端中的谓词用法

Predicate usage in Hazelcast C# client

Java 示例显示了 Hazelcast 中谓词功能的各种用法,但我无法找到使用 C# 过滤映射的方法。

例如这适用于 Java:

EntryObject e = new PredicateBuilder().getEntryObject();
Predicate agePredicate = e.get( "age" ).equal( age );
Predicate predicate = e.get( "name" ).equal( name ).and( agePredicate );
people = personMap.values( predicate );

查看C#客户端的源代码,没有找到class名为EntryObject或PredicateBuilder的

这也是Java客户端中的另一个谓词对象:

IMap<Employee> map = hazelcastInstance.getMap( "employee" );
Set<Employee> employees = map.values( new SqlPredicate( "active AND age < 30" ) );+

C# 客户端有一个 SqlPredicate class 但此代码在 C# 中不被接受:

var predicate = new SqlPredicate("Type = 1 AND Enabled = 1");
var map = Cache.GetMap<int, Machine>(nameof(Machine));
var enabledMachines = map.Values(predicate);

编译器错误是:

CS1503: cannot convert from 'Hazelcast.Core.SqlPredicate' to 'Hazelcast.Core.IPredicate<int, Machine>'

顺便说一句...

那么在 C# 中查询地图的正确方法是什么?

使用 Hazelcast .NET 客户端 3.6.2,您应该能够使用静态谓词 class,其工作方式类似于 Java。您遇到的编译错误也应该得到修复。以前版本的 .NET 客户端有这个问题。

此处提供了一些示例:

https://github.com/hazelcast/hazelcast-csharp-client/blob/master/Hazelcast.Test/Hazelcast.Client.Test/PredicatesTest.cs