2012-01-31 31 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