Вопрос

Я использую массивный Чтобы получить конфигурацию таблицы в базе данных. Я хотел бы кэшировать конфигурацию, так как приложение получает значения от него все время.

Как только кэшируется, есть простой способ найти объект, где name = 'что -то'

Вот где вся таблица кэшируется.

    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; 
    } 

Вот где я хотел бы потянуть одну запись из этого метода

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

Я знаю, что Linq или лямбда не допускаются в динамических объектах. Но что такое Следующее лучшее Способ вытащить этот объект из этого списка?

Это было полезно?

Решение

Вы не смогли писать выражение ламды напрямую как аргумент, но вы можете назначить его в вариабельную переменную. Также я считаю, что методы расширения не будут работать на динамических объектах, поэтому вам необходимо вызвать метод расширения напрямую.

Я думаю, что вы можете использовать код ниже,

        Func<dynamic, bool> check = x => x.Name == name;
        System.Linq.Enumerable.Where<dynamic>(this.Get(), check);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top