Страницы с тегами : 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; }
}
