Кэширование результатов linq-to-sql? - PullRequest
0 голосов
/ 10 августа 2010

Большинство будет рекомендовать кэширование в виде списка.Я знаю, что это решение, и, возможно, это то, с чем я согласен.Но что, если кто-то хочет иметь возможность обрабатывать кэшированный linq-to-sql с полной функциональностью IQueryable (IEnumerable?)?

Если попытаться кэшировать необработанный результат, возникает ошибка: «Результаты запроса не могут бытьперечислил более одного раза ".

Итак, чтобы прояснить мои вопросы:

  1. Является ли хеш-код для списков, IQueryable и IEnumerable уникальным?
  2. Если яхотите безопасно кэшировать результат linq-to-sql И обеспечить максимальную функциональность впоследствии, как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 10 августа 2010

После того, как вы кэшировали 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

1 голос
/ 10 августа 2010

Но что, если кто-то хочет иметь возможность обрабатывать кэшированный linq-to-sql с полной функциональностью IQueryable (IEnumerable?)?

Класс List<T> реализует IEnumerable<T>, и вы можете запросить его, используя LINQ, если хотите.

Большинство будет рекомендовать кэширование в виде списка.

Я бы сказал, что это зависит от того, что вы планируете делать со своими кэшированными данными. A List<T> хорошо во многих случаях. Если вы хотите иметь быстрый поиск по уникальному ключу, лучше хранить кэшированные данные в Dictionary<TKey, TValue>.

0 голосов
/ 10 августа 2010

Что именно вы кешируете?IQueryable не является результатом (запрос - это вопрос, а не ответ).

Кроме того, IEnumerable - это не вещь, это просто описание.Должна быть некоторая базовая реальная структура данных (например, список или массив)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...