大多数人会推荐缓存作为列表。我知道这是一个解决方案,可能是我一起去的。但是,如果希望能够使用完整的IQueryable(IEnumerable?)功能来处理缓存的linq-to-sql,该怎么办?缓存linq-to-sql结果?
如果试图缓存原始结果,则会出现错误“查询结果不能枚举超过一次”。
因此,要明确我的问题是:
- 是对列表,IQueryable的哈希码,和IEnumerable独特之处?
- 如果我想安全地缓存linq-to-sql结果并提供最大的功能,我该怎么做?
大多数人会推荐缓存作为列表。我知道这是一个解决方案,可能是我一起去的。但是,如果希望能够使用完整的IQueryable(IEnumerable?)功能来处理缓存的linq-to-sql,该怎么办?缓存linq-to-sql结果?
如果试图缓存原始结果,则会出现错误“查询结果不能枚举超过一次”。
因此,要明确我的问题是:
一旦你缓存了一个IEnumerable,它就是一个仍然可以自行查询的“水合”列表。该AsQueryable()
方法可用于对查询被填充到列表中记录的子集:
IEnumerable foo = from o in ctx.MyObjects
select o;
foo.ToList();
IEnumerable bar = from f in foo.AsQueryable()
select f;
下面是使用AsQueryable已()一些更多的好信息: http://weblogs.asp.net/zeeshanhirani/archive/2008/07/31/using-asqueryable-with-linq-to-objects-and-linq-to-sql.aspx
谢谢。这是另一个好的http://www.weirdlover.com/2010/05/11/iqueryable-can-kill-your-dog-steal-your-wife-kill-your-will-to-live-etc/ – 2010-08-10 19:02:42
你在那里的'foo.ToList()'不会做任何有用的事情。这是否有原因? – 2010-08-10 19:05:03
关于gethashcode()如何适用于列表类型的想法/颜色? – 2010-08-10 19:05:07
但是,如果一个人想能够治疗缓存LINQ到SQL具有完全的IQueryable(IEnumerable的?)的功能是什么?
List<T>
这个类实现了IEnumerable<T>
,如果你愿意,你可以使用LINQ查询它。
大多数人会推荐缓存作为列表。
我想说这取决于您打算如何处理缓存数据。 A List<T>
在许多情况下都很好。如果您希望基于唯一密钥进行快速查找,则最好将缓存数据存储在Dictionary<TKey, TValue>
中。
究竟什么是你缓存? IQueryable不是结果(查询是问题,而不是答案)。
此外,一个IEnumerable不是一个东西,它只是一个描述。必须有一些潜在的真实数据结构(如列表或数组)
缓存本地数据,同时保持完整的IQueryable能力是感兴趣的冲突。 Linq-to-SQL中的IQueryable的目的是将LINQ表达式转换为SQL。 – kbrimington 2010-08-10 18:56:22
@Kbrimington也许我需要一个Ienumerable呢?我想对缓存结果使用过滤功能。这也是理想的,我不需要知道我是使用缓存还是非缓存数据。我承认我没有查看接口,看看哪些是必需的,但我相当肯定列表是更有限..也许扩展方法提供了。 – 2010-08-10 18:58:37