Новый LINQPad

понедельник, 9 июля 2012, Roman Melnyk

Для всех кто работает с LINQ, Entity Framework или просто изучает C#, LINQPad - незаменимая тулза. Поэтому выход новой (уже 2.42 / 4.42) версии влечет за собой приятные новшества.

LINQPad предоставляет новый extension метод Cache для кэширования результатов запроса. Cache () очень прост, так что вы можете использовать его в существующих запросах без особых изменений.

Чтобы продемонстрировать, попробуйте выполнить следующий запрос, который загружает веб-страницу, а потом показывает, сколько раз слово 'Semaphore' появляется на каждой странице:

 var webPages = (
   from page in "default.aspx part2.aspx part3.aspx part4.aspx part5.aspx".Split()
   select new 
   {
      Uri = page,
      Text = new System.Net.WebClient().DownloadString ("http://albahari.com/threading/" + page)
   }
).Cache();

var query = from page in webPages
   select new 
   {
      page.Uri, 
      matches = Regex.Matches (page.Text, @"(?i)\b" + "semaphore" + @"\b").Count
   };

query.Dump();

Теперь измените "Semaphore" чем-то другим и выполните запрос повторного. Обратите внимание, что он выполняется мгновенно - так мы вызвали Cache на медленно выполняемой части запроса.

Вы можете вызвать Cache() несколько раз в запросе для кэширования различных наборов результатов. LINQPad будет выделять отдельный слоты кэша( если результаты одинаковы) и вы можете вызвать Cache() с заданным уникальным ключом.

Вы можете очистить кэш в любое время, вызвав AppDomain запрос (Shift + F5).

Cache() работает в (lazily-evaluated) IEnumerable / IQueryable выражениях . Если что-то кэшируется в первый раз, то он действует, как будто вы называли ToArray от последовательности выражений, за исключением того, который также содержит ссылку на результаты в памяти. Когда он снова запускается, он извлекает только ссылку, а не перечисление входной последовательности выражений.

Вы также можете закэшировать non-lazy последовательности (к примеру массивы) и другие объекты, с помощью кэша метод Util класса, который принимает Func . Например:

Customer c = Util.Cache (() => Customers.First());

LINQPad теперь также поддерживает:

• Базу данных Oracle (ну наконец-то!) • the Microsoft DataFlow CTP • ключевые слова async и await ( для этого нужно установить Framework 4.5 beta или Async CTP) • кастомизированые имплементации IObservable и IAsyncEnumerable • Entity Framework 4.1 / 4.2 / 4.3. ESQL и SQL запросы уже работают даже для code-first connections.

Приятного кодинга!

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии