2011-05-20 91 views
2

在Application_Start中,我緩存了一些通過LINQ to SQL獲得的對象。如何獲得LINQ緩存對象的對象字段?

objDataContext objBetting = new objDataContext(); 
    var testObjects= from element in objBetting.Elements 
        select new { element.attribute }; 
    HttpRuntime.Cache["test"] = testObjects; 

在一些頁面上,我想讀取值testObject.attribute。我只能:

var objS = (IQueryable)Cache["test"]; 

我緩存匿名類型的對象,如何獲取屬性,也許是更好的問題。


OK,我會和填充System.Data.Linq.Table類型的對象,我會緩存它,能鑄造。

+0

什麼?你想做什麼?我很困惑 – hunter 2011-05-20 13:32:26

+0

獲取testObjects.attribute的值。 – gormit 2011-05-20 13:45:17

+0

「屬性」是什麼類型的對象? – hunter 2011-05-20 13:48:33

回答

2

不緩存可查詢。它們被懶惰地評估過,並且機會很高(1)當你讀取緩存時,上下文不會存在,所以枚舉它將會死掉,(2)它不是可序列化的,所以它不會工作與分佈式緩存。

如果您必須緩存一些內容,請將其放入一個基本類型的數組中。

+0

我想要緩存對象,來自LINQ查詢的結果以及讀取屬性。 – gormit 2011-05-20 14:07:18

+0

您可以緩存對象,只要它們是可序列化的即可。不過,您無法緩存查詢。 – 2011-05-20 21:41:19

1
HttpRuntime.Cache["test"] = testObject.ToList(); 

IList<string> attributes = (IList<string>)Cache["test"]; 
+0

我緩存整個對象,並且需要通過foreach(getObjects中的var o),但是我沒有o.attribute。這是個問題。 – gormit 2011-05-20 14:04:58

+0

你的頭像只是讓我的早晨。 – Yuck 2011-05-20 14:26:41