Страницы с тегами : Linq
Подборка материалов о серверной оптимизации ASP.NET
Серия постов о кешировании на хабре:
- Стратегия кеширования
- Как прикрутить кеширование к ASP.NET приложению
- Применение инфраструктуры кеширования ASP.NET
- Интеграция кеша ASP.NET с Redis и зависимости кеша от БД
Какие темы вам еще будут интересны?
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server с помощью LINQ
К сожалению, как обычно я не показал все что хотел, часть материала не попала на видео запись. Но я восполню этот недостаток.
Как вы думаете, можно ли на Linq делать запросы, которые работают быстрее рукопашных? Оказывается да, и очень просто.
Например надо сделать функцию, которая отбирает заказы по дате отгрузки. Если параметр указал, то выбрать заказы за эту дату. А если не указана дата, то выбрать все заказы, у которых дата отгрузки пустая. Обычный разработчик напишет такую процедуру:
CREATE PROCEDURE [dbo].[GetTransactionsByShipDate] @shipDate datetime AS SELECT t.Id, t.ProductId, t.TransactionDate from Transactions t where (@shipDate is not null and t.ShippedDate = @shipDate) or (@shipDate is null and t.ShippedDate is null)
Linq и обход дерева
Простой код для префиксного обхода дерева.
public static class Treenumerable { public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> childrenSelector) { return source.SelectMany(e => Traverse(e, childrenSelector)); }
Сращивание expression tree
В предыдущем посте я показал как можно использовать обобщенное программирование при доступе к данным. С помощью пары простых методов можно заставить работать код вида
from e in context.Entity1Set.Visible() select e;
IQueryable и Generics
Довольно часто различные сущности данных обладают сходными свойствами и обрабатываются одинаково. При обработке объектов в программе общность выражается интерфейсами, а обработка производится обобщенными методами (generics).
При использовании Linq можно написать аналогично
/// <summary> /// Интерфейс для всех сущностей, /// которые могут не показываться позьзователю /// </summary> public interface IVisible { bool Visible { get; set; } }