2012-01-31 44 views
-1

匿名值的字典,我創建的LINQ查詢結果的字典從計算器問題,建議回答:A dictionary where value is an anonymous type in C#如何檢索從緩存在asp.net

var intToAnon = sourceSequence.ToDictionary(
e => e.Id, 
e => new { e.Column, e.Localized }); 

我加入這個新對象變成我的ASP.NET緩存。我如何從緩存中讀取它(HttpContext.Current.Cache.Add)?我想我需要反思,但不知道如何去做。

任何想法?

感謝

+0

[訪問C#匿名類型對象]的可能重複(http://stackoverflow.com/questions/713521/accessing-c-sharp-anonymous-type-objects) – nawfal 2014-06-28 08:56:01

回答

1

要檢索匿名類型你要麼需要使用反射或cast-by-example,這兩者都不是在這種情況下,一個好主意。

相反,創建自己的自定義類型來保存數據,或使用一個內置Tuple類型:

// dict will be a Dictionary<TId, Tuple<TColumn, TLocalized>> 
// where TId, TColumn and TLocalized are the actual types of those properties 
var dict = sourceSequence.ToDictionary(e => e.Id, 
             e => Tuple.Create(e.Column, e.Localized)); 
Cache["yourCacheKey"] = dict; 

然後,當你從剛剛轉換爲相應的Tuple緩存中的對象類型:

// i'm assuming here that Id is Int32, Column is String, and Localized is Boolean 
var dict = (Dictionary<int, Tuple<string, bool>>)Cache["yourCacheKey"]; 
+0

謝謝,答案,你能否展示如何使用Tuple來代替o f字典投影?我第一次試圖沒有成功(缺乏理解) – 2012-01-31 12:08:39

+0

太棒了,這看起來像我需要....成千上萬的感謝。我不想爲此創建自定義類型,我認爲您的建議完全符合我的要求。 – 2012-01-31 12:14:26

+0

我還有一個問題,這個問題。返回的序列在添加到字典之前需要進行分組。這樣做時,我無法將其添加到上面建議的字典方式顯示。我怎樣才能做到這一點?我目前收到一個例外「已經添加了具有相同密鑰的項目。」 – 2012-02-01 09:26:32