Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何缓存IQueryable对象?_Asp.net_Linq_Caching_Iqueryable - Fatal编程技术网

Asp.net 如何缓存IQueryable对象?

Asp.net 如何缓存IQueryable对象?,asp.net,linq,caching,iqueryable,Asp.net,Linq,Caching,Iqueryable,我有一个方法,它为“UserStatus”表中的所有行返回Linq to SQL查询: public IQueryable<BLL.Entity.UserStatus> GetAll() { var query = from e in _SelectDataContext.UserStatus select new BLL.Entity.UserStatus { UserS

我有一个方法,它为“UserStatus”表中的所有行返回Linq to SQL查询:

public IQueryable<BLL.Entity.UserStatus> GetAll()
{
    var query = from e in _SelectDataContext.UserStatus
                select new BLL.Entity.UserStatus
                {
                    UserStatusId = e.UserStatusId,
                    Enum = e.Enum,
                    Name = e.Name
                };

    return query;
}
public IQueryable GetAll()
{
var query=从e进入_SelectDataContext.UserStatus
选择新建BLL.Entity.UserStatus
{
UserStatusId=e.UserStatusId,
Enum=e.Enum,
Name=e.Name
};
返回查询;
}

它只是一个几乎不会改变的查找表,所以我想缓存结果。我可以将其转换为
列表
并缓存它,但我更喜欢返回IQueryable对象,因为类中的其他方法依赖于此。有人能帮忙吗?谢谢。

看看企业库。这是一个非常好的通用缓存体系结构。

能否为您提供解决方案?当然不是最好的。

你真的不能这么做——可查询对象更像是指针而不是数据。如果您正在缓存,那么您正在缓存数据,因此需要加载数据。Yapiskan的想法是正确的——缓存生成的ToList()并将其带回AsQueryable()


请注意,缓存的列表没有DataContext,因此您的查询选项将仅限于列表中加载的数据。

我必须询问您实际想要缓存什么?查询还是结果

如果是结果,那么上面的建议是有意义的,但是如果您想缓存查询供以后使用,那么我可以建议使用CompiledQuery,然后将其存储在某个地方

下面是一篇关于和如何使用它的文章


同样,这完全取决于您是否希望该查询已执行…

问题在于,如果您想使用它加入另一个查询,您必须稍后将其重新绑定到datacontext。除非您希望联接或筛选器在内存中运行。您不知道AsQueryable()方法。我想我可能会添加一个额外的“List”方法,但这回答了问题,谢谢。public IQueryable GetAllCountries(int?primaryCategoryId,int?secondaryCategoryId){var key=MakeMedia.CustomClasses.Constants.Persistance.PersistanceKeys.AllCountries+primaryCategoryId+secondaryCategoryId;var countries=CacheManager.Get(key);if(countries==null)CacheManager.Insert(key,_repository.GetAllCountries(primaryCategoryId,secondaryCategoryId).ToList());返回CacheManager.Get(key).AsQueryable();}