Pergunta

Eu estou usando maciça para obter a tabela de configuração no banco de dados. Eu gostaria de armazenar em cache a configuração desde que o aplicativo recebe valores a partir dele o tempo todo.

uma vez em cache há uma maneira fácil de encontrar o objeto, onde name = 'algo'

aqui é o lugar onde toda a tabela é armazenada em cache.

    protected override dynamic Get()
    { 
        var ret = HttpRuntime.Cache["Config"]; 
        if (ret == null)
        { 
            ret = _table.All(); 
            HttpRuntime.Cache.Add("Config", ret, null, DateTime.Now.AddMinutes(2), Cache.NoSlidingExpiration,CacheItemPriority.Low, null );
        }
        return ret; 
    } 

aqui é onde eu gostaria de puxar um registro do que o método

    protected override dynamic Get(string name)
    {
        return this.Get().Where(x => x.Name == name ).SingleOrDefault(); 
    }

Eu sei LINQ ou lambda declarações não são permitidos em objetos dinâmicos. mas o que é a próxima melhor maneira de puxar que um objeto fora dessa lista?

Foi útil?

Solução

Você não poderia escrever a expressão lambda diretamente como argumento Onde, mas você pode atribuí-lo a uma variável Func. Também eu acredito que os métodos de extensão não iria funcionar em objetos dinâmicos, de modo que você tem que chamar o método de extensão diretamente.

Eu acho que você poderia usar o código abaixo,

        Func<dynamic, bool> check = x => x.Name == name;
        System.Linq.Enumerable.Where<dynamic>(this.Get(), check);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top