.NET → IEnumerable<T> и IQueryable<T>, в чем разница?
Уважаемые Хабровчане, решил поделиться одним не очевидным моментом использования LinqToSql, с которым столкнулся некоторое время назад. А именно, про особенности использования каскадных Linq запросов:
Работая над очередным ASP.NET MVC проектом, и проектируя уровень доступа к БД мне потребовалось проверить качество скриптов, генерируемых Framework-ом L2C.
class User {
public long Id { get; set; }
public string Name { get; set; }
public IEnumerable<Parameter> Parameters { get; set; }
}
class Parameter {
public long UserId { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
Для получения данных написан класс UserRepository:
class UserRepository: MyProjectDataContext {
public IEnumerable GetUsers() {
return this.Users.ToModelUsers();
}
}
static class RepositoryHelper {
public static IEnumerable<Model.User> ToModelUsers(this IEnumerable<DataAccess.User> users) {
return users.Select(u => new Model.User { Id = u.Id, Name = u.Name, Parameters = u.Parameters.ToModelParameters() });
}
public static IEnumerable<Model.Parameter> ToModelParameters(this IEnumerable<DataAccess.Parameter> parameters) {
return parameters.Select(u => new Model.Parameter {… });
}
}
пишем
var users = userRepository.GetUsers().ToList();
смотрим профайлер, и с удивлением обнаруживаем что для загрузки 10 пользователей и их параметров было выполнено целых 11 запросов.
Работая над очередным ASP.NET MVC проектом, и проектируя уровень доступа к БД мне потребовалось проверить качество скриптов, генерируемых Framework-ом L2C.
Что имеем (упрощенный вариант модели):
class User {
public long Id { get; set; }
public string Name { get; set; }
public IEnumerable<Parameter> Parameters { get; set; }
}
class Parameter {
public long UserId { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
Для получения данных написан класс UserRepository:
class UserRepository: MyProjectDataContext {
public IEnumerable GetUsers() {
return this.Users.ToModelUsers();
}
}
static class RepositoryHelper {
public static IEnumerable<Model.User> ToModelUsers(this IEnumerable<DataAccess.User> users) {
return users.Select(u => new Model.User { Id = u.Id, Name = u.Name, Parameters = u.Parameters.ToModelParameters() });
}
public static IEnumerable<Model.Parameter> ToModelParameters(this IEnumerable<DataAccess.Parameter> parameters) {
return parameters.Select(u => new Model.Parameter {… });
}
}
пишем
var users = userRepository.GetUsers().ToList();
смотрим профайлер, и с удивлением обнаруживаем что для загрузки 10 пользователей и их параметров было выполнено целых 11 запросов.
Персональные блоги → Итоги первой встречи .net user group Одесса
В четверг прошла первая встреча одесской .net user group. Конечно, многие волновались, особенно организаторы и участники. Как она пройдет. Ведь ИТ жизнь Одессы не такая уже и активная по крайней мере, я надеюсь что была до этого момента. Но мы постарались сделать все возможное, чтобы она прошла на высоком уровне.
Встреча проходила в конференц-зале компьютерной академии ШАГ. Так как зарегистрировалось 65 участников пришлось проводить ее в большом конференц-зале, и он действительно был почти заполнен – пришло порядка 40 участников.
Встреча проходила в конференц-зале компьютерной академии ШАГ. Так как зарегистрировалось 65 участников пришлось проводить ее в большом конференц-зале, и он действительно был почти заполнен – пришло порядка 40 участников.
.NET → Распараллеливание задач. Случай «идеальной параллельности». Часть 1
Распараллеливание кода без зависимостей
Введение
В первой части данной статьи мы поговорим о подходах к параллельной обработке циклов в тех удачных случаях, когда между отдельными итерациями нет зависимостей, и они могут корректно выполняться параллельно. Во второй части — рассмотрим появившиеся в .NET 4.0 механизмы для управления таким распараллеливанием, и выявим тонкости работы этих механизмов.
Подкасты → 12й Подкаст Петербургской Группы Alt.Net

Участники
Новые фичи C# 4.0 и .Net Framework 4.0
C# 4.0
- Опциональные и именованные параметры
- Контракты
- Ковариантность и контравариантность
- dynamic
.Net 4.0
- DLR
- IronPython
- PLINQ/TPL
- Использование interop C#/C++/OpenMP в TypograFix
Дополнительно
- Метапрограммирование в C# 5?
- Почему никто не упомянул F#?
- Квантовые компьютеры :)
- Будет ли аналог Mono.Simd?
- .Net и Embedded
Наш подкаст на RPOD и PodFM
прослушан 340 раз
НЛО прилетело и опубликовало эту надпись здесь.