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#中查询地图的正确方法是什么?
答案 0 :(得分:1)
使用Hazelcast .NET客户端3.6.2,您应该能够使用静态Predicates类,它类似于Java类。您遇到的编译错误也应该修复。以前版本的.NET客户端存在此问题。
这里有一些例子: