2012-01-11 72 views
2

我正在使用massive來獲取數據庫中的配置表。我想緩存配置,因爲應用程序始終從中獲取值。查詢動態對象列表

一旦緩存有一個簡單的方法來找到其中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或lambda語句在動態對象允許拉一個記錄。但是什麼是下一個最好的的方式來拉出該列表中的一個對象?

回答

1

無法直接將Lamda表達式作爲Where參數來編寫,但可以將其指定給Func變量。 另外我相信擴展方法不適用於動態對象,所以你必須直接調用擴展方法。

我想你可以使用下面的代碼,

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

感謝薩姆。一旦我到達我的電腦,我會嘗試一下。 – eiu165 2012-01-12 01:44:00

+0

我如何獲得單個元素? http://stackoverflow.com/questions/8978619/query-a-list-of-dynamic-objects-for-a-firstordefault – eiu165 2012-01-23 21:11:49

+0

作爲另一個問題的答案,你可以使用FirstOrDefault或SingleOrDefault – 000 2012-01-23 22:38:17