查询动态对象列表

时间:2012-01-11 23:15:48

标签: linq .net-4.0 lambda microsoft-dynamics massive

我正在使用massive来获取数据库中的配置表。我想缓存配置,因为应用程序始终从中获取值。

缓存后,有一种简单的方法可以找到name ='something'

的对象

这里是缓存整个表的地方。

    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或lambda语句。但是从列表中拉出一个对象的次佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您不能将lamda表达式直接写为Where参数,但可以将其分配给Func变量。 另外我认为扩展方法不适用于动态对象,所以你必须直接调用扩展方法。

我认为您可以使用以下代码,

        Func<dynamic, bool> check = x => x.Name == name;
        System.Linq.Enumerable.Where<dynamic>(this.Get(), check);