Asp.net mvc 2 ASP.NET MVC-缓存IQueryable数据

Asp.net mvc 2 ASP.NET MVC-缓存IQueryable数据,asp.net-mvc-2,caching,asqueryable,Asp.net Mvc 2,Caching,Asqueryable,我发现了这个问题,我想知道是否能够将这个方法用于IQueryable数据 Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers Dim users = (From u In dc.Users Select u) Return users.AsQueryable End Function

我发现了这个问题,我想知道是否能够将这个方法用于IQueryable数据

    Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers 
        Dim users = (From u In dc.Users 
                    Select u) 
        Return users.AsQueryable 
    End Function 
我能把这个换成现金吗

    Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers 
       Dim users = Cache("users")
       If users Is Nothing Then
           users = (From u In dc.Users 
                           Select u) 
           Cache("users") = users
       End If

       Return users.AsQueryable
    End Function

您可以这样做是的,但它不会产生预期的效果,因为(假设dc是一个linq到sql数据上下文)IQueryable不是数据的集合,它是一个存储的查询,稍后将执行,您将需要存储一个IList或类似的查询,如果需要,您仍然可以将其作为IQueryable返回,尽管这可能会让其他人感到困惑


在缓存之前使用ToList()。

您可以这样做是的,但它不会产生预期的效果,因为(假设dc是linq到sql数据上下文)IQueryable不是数据的集合,它是一个存储的查询,稍后将执行,您将需要存储一个IList或类似内容,如果需要,您仍然可以将其作为IQueryable返回,尽管这可能会让其他人感到困惑


在缓存它之前使用ToList()。

这样就行了。但您不应该缓存IQueryable,因为它们保留一个DataContext。首先将数据转换为列表。e、 g.users=dc.users.ToList();那就行了。但您不应该缓存IQueryable,因为它们保留一个DataContext。首先将数据转换为列表。e、 g.users=dc.users.ToList();这正是我所想的。我认为我更好的选择是在我的服务层而不是repo层中使用缓存(与其他人告诉我的相反)。我在repo层中使用AsQueryable,然后从服务层调用repo。我会藏在里面的。谢谢你的见解。这正是我所想的。我认为我更好的选择是在我的服务层而不是repo层中使用缓存(与其他人告诉我的相反)。我在repo层中使用AsQueryable,然后从服务层调用repo。我会藏在里面的。谢谢你的见解。