ASP.NET MVC - кэширование данных IQueryable

Я нашел этот вопрос, как кэшировать данные в приложении MVC, и мне интересно, можно ли использовать этот метод с данными 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

1 ответ

Решение

Вы можете сделать это да, но это не даст желаемого эффекта, поскольку (при условии, что dc является контекстом данных linq to sql) IQueryable - это не набор данных, это хранимый запрос, который будет выполнен позже, вам потребуется храня IList или аналогичный, вы все равно можете при желании вернуть его как IQueryable, хотя это может сбить с толку других.

Используйте ToList() перед его кэшированием.

Другие вопросы по тегам