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# 客户端的源代码,我找不到名为 EntryObject 或 PredicateBuilder 的类。
这也是 Java 客户端中的另一个谓词对象:
IMap<Employee> map = hazelcastInstance.getMap( "employee" );
Set<Employee> employees = map.values( new SqlPredicate( "active AND age < 30" ) );+
C# 客户端有一个 SqlPredicate 类,但在 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,您应该能够使用静态 Predicates 类,其工作方式类似于 Java 类。您遇到的编译错误也应该得到修复。以前版本的 .NET 客户端存在此问题。
此处提供了一些示例:
https://github.com/hazelcast/hazelcast-csharp-client/blob/master/src/Hazelcast.Net.Tests/Query/PredicatesTests.cs