C# Apache 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

我正在寻找.net/C#实现,在该实现中,我可以使用Ignite.LoadCache()方法加载缓存,以仅使用某些查询操作加载。或者更具体地说,只加载缓存中需要的内容,而不是所有内容

现在我正在加载带有
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);