C# Apache ignite loadCache()带有过滤器或谓词条件,带有泛型
我正在寻找.net/C#实现,在该实现中,我可以使用Ignite.LoadCache()方法加载缓存,以仅使用某些查询操作加载。或者更具体地说,只加载缓存中需要的内容,而不是所有内容 现在我正在加载带有C# Apache ignite loadCache()带有过滤器或谓词条件,带有泛型,c#,.net,linq,ignite,C#,.net,Linq,Ignite,我正在寻找.net/C#实现,在该实现中,我可以使用Ignite.LoadCache()方法加载缓存,以仅使用某些查询操作加载。或者更具体地说,只加载缓存中需要的内容,而不是所有内容 现在我正在加载带有null的缓存,如这里所述 这是我当前的实现 public List<TV> Where<TK, TV>(Expression<Func<ICacheEntry<TK, TV>, bool>> query) { v
null
的缓存,如这里所述
这是我当前的实现
public List<TV> Where<TK, TV>(Expression<Func<ICacheEntry<TK, TV>, bool>> query)
{
var cache = _ignite.GetCache<TK, TV>(MyLocalCache);
LoadCache(cache);
var result = cache.AsCacheQueryable().Where(query);
}
private static void LoadCache<TK, TV>(ICache<TK, TV> cache)
{
cache.LoadCache(null);
}
公共列表,其中(表达式查询)
{
var cache=_ignite.GetCache(MyLocalCache);
LoadCache(cache);
var result=cache.AsCacheQueryable().Where(查询);
}
专用静态void加载缓存(ICache缓存)
{
LoadCache(空);
}
另外,我使用SQL作为我的第三方持久性层您应该在定制的ICacheStore实现中处理这个问题 您可以通过将自定义参数传递给LoadCache方法来控制加载:
public void LoadCache(Action<object, object> act, params object[] args)
{
// no args, yield all values
if (args == null)
{
for (var item in loadAllFromSql())
{
act(item.Id, item);
}
return;
}
// args contains start and count
int start = (int) args[0];
int cnt = (int) args[1];
for (int i = start; i < start + cnt; i++)
{
act(new Key(i), new Value(i));
}
}
我认为将表达式作为参数传递应该对您有用。好的,我为每个商店都安装了LoadCache。现在的问题是我如何将表达式传递给
cache.LoadCache
方法它在本地指令中找不到CacheEntryFilter我现在正试图这样调用函数,cache.LoadCache(new CacheEntryFilter(),query);//找不到CacheEntryFilter
我认为您不需要在那里使用筛选器,可以将其设置为null。。另外,您可以传递整个表达式,并且应该正确地序列化它。像表达式myExp=i=>i>10
然后cache.LoadCache(null,myExp)
然后可以检查此参数并将其转换回LoadCache方法中的表达式,类似于在答案中获取start和count值
// load 10 entities starting from 100
cache.LoadCache(new CacheEntryFilter(), 100, 10);