在Hazelcast C#客户端中使用谓词

时间:2016-05-26 08:00:10

标签: c# hazelcast

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#中查询地图的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

使用Hazelcast .NET客户端3.6.2,您应该能够使用静态Predicates类,它类似于Java类。您遇到的编译错误也应该修复。以前版本的.NET客户端存在此问题。

这里有一些例子:

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