大多數人會推薦緩存作爲列表。我知道這是一個解決方案,可能是我一起去的。但是,如果希望能夠使用完整的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