Стаття заснована на відповіді на StackOverflow. Почну з опису проблеми, з якою я зіткнувся. Є кілька сутностей в базі даних, які потрібно відображати у вигляді таблиць на UI. Для доступу до бази даних використовується Entity Framework. Для цих таблиць є фільтри, по полях цих сутностей. Потрібно написати код для фільтрації сутностей за параметрами.
Читати далі →

Літня практика: Топ-10 курсів Microsoft Virtual Academy

Рухаємося далі і продовжуємо прокачувати скіли в віртуальної академії Microsoft MVA. минулого добірці були найцікавіші курси для новачків, сьогодні ви дізнаєтеся популярні курси для підготовлених фахівців: Windows 10 у корпоративній мережі, JSON і C#, використання Docker-контейнерів в хмарі Microsoft Azure, забезпечення катастрофостійкості в додатках, віртуалізація серверів Windows Server Hyper-V і System Center, імпортування локальної системи Linux в хмару, написання скриптів в PowerShell і використання технології PowerShell Desired State Configuration, а також про LINQ, Data Science і Machine Learning.




Читати далі →

Relinx — ще одна реалізація .NET LINQ методів на C++, з підтримкою «ледачих обчислень»

RelinxLogoСеред багатьох реалізацій LINQ-подібних бібліотек C++ є багато цікавих, корисних і ефективних. Але на мій погляд, більшість з них написані з певною зневагою до C++ як до мови. Весь код цих бібліотек написаний так, ніби намагаються виправити його «потворність». Зізнаюся, я люблю C++. І як би її не поливали брудом, моя любов до нього навряд чи пройде. Можливо, це частково тому, що це моя перша мова програмування високого рівня і другий, який я вивчив після Асемблера.

Читати далі →

LINQ конвертор між римськими та арабськими числами

Склалося, що розбирав зі студентами LINQ, а зі школярами перетворення між римською та арабською системою числення. У підсумку, думки заплелись і вийшов цікавий код конвертора, який шкода поховати в локальних архівах. Приклад згодиться в якості вправи для розуміння LINQ.

Отже, нам знадобиться словник, сопоставляющий елементи римських чисел з арабськими.

Читати далі →

Створюючи enterprise — рішення завтрашнього дня

Висловлюємо подяку за підготовку статті Павлу Ковтуну — CEO Mycroft Assistant. Павло більше 12 років
спеціалізується в області автоматизації бізнесу і supply chain management.Є автором унікальних методик аналізу і прийняття рішень в SCM, творець першої інноваційної системи управління запасами експертного рівня.


Читати далі →

Критичне відміну компіляції дерева виразів в Visual Studio 2015

Після переходу на Visual Studio 2015 зіткнувся з неприємним і досить критичним відзнакою в компіляції одного і того ж коду старою версією студії і нової.

Суть його полягає в тому, що при генерації дерева виразів Visual Studio 2015 трохи по іншому генерує результат, а саме вставляє операнд Convert() для явного приведення типів, які можуть загалом наводитися неявно.

Читати далі →

LINQом за «Життя»

Знаменита гра Джона Конвея «Життя», завдяки своїй простоті, цікавості і повчальність, реалізовувалася програмістами так багато разів, що поступається ймовірно тільки горезвісної сортування «бульбашкою».

Наведу, тим не менш, ще один варіант виконання цієї чудової гри, цілком заснований на технології LINQ в середовищі .NET — простий, компактний, без циклів і багатовимірних масивів.


Читати далі →

Рентабельний код 2: скрадливий DDD, що крадеться CQRS


Трьом програмістам запропонували перетнути поле, і дійти до будинку на іншій стороні. Програміст-початківець подивився на коротку дистанцію і сказав, «Це не далеко! Це займе у мене десять хвилин». Досвідчений програміст подивився на полі, трохи подумав і сказав: «Я міг би дістатися туди за день». Новачок подивився на нього з подивом. Гуру-програміст подивився на поле і сказав. «Здається хвилин десять, але я думаю п'ятнадцяти буде достатньо». Досвідчений програміст розсміявся.

Програміст-початківець рушив в шлях, але протягом декількох секунд, почали вибухати міни, залишаючи після себе великі ями. Від вибухів він відлітав назад, і йому доводилося починати спочатку знову і знову. У нього пішло два дні, щоб досягти мети. До того ж він весь тремтів і був поранений, коли прийшов.

Досвідчений програміст поповз рачки. Обережно мацаючи землю і шукаючи міни, рухаючись тільки якщо був упевнений, що це безпечно. Повільно і обережно він перетнув поле протягом дня. Тільки зачепивши пару хв.

Гуру програміст пустився в дорогу, і пішов прямо через поле. Цілеспрямовано і прямо. Він досяг мети всього за десять хвилин.
«Як тобі це вдалося?» — запитали двоє інших — «Як ти примудрився не зачепити ні однієї міни?»
«Легко.» — відповів він. «Я не закладав міни на своєму шляху».
Як не прикро, доведеться визнати – ми самі закладаємо собі міни. першої частини я детально розібрав основні ризики в розробці і описав технологічні та методологічні способи ослаблення цих ризиків. За минулий рік я отримав безліч коментарів, основний зміст яких зводився до наступного: «все круто, але з чого почати і як все це буде виглядати в реальному світі». Дійсно, перший текст носить скоріше теоретичний характер і являє собою каталог посилань. У цій статті я постараюся привести якомога більше прикладів.

Читати далі →

LINQ для PHP: швидкість має значення

Якщо ви не знаєте, що таке LINQ, і навіщо він здався на PHP, дивіться попередню статтю по YaLinqo.

З рештою продовжуємо. Відразу попереджаю: якщо ви вважаєте, що ітератори — це непотрібна штука, яку навіщось притягли в PHP, що продуктивність з-за всіх цих новомодних штучок з анонімними функціями звірячому просідає, що потрібно виміряти кожну микросекунду, що нічого краще старого-доброго for не придумано — то проходьте мимо. Бібліотека і стаття не для вас.

З рештою продовжуємо. LINQ — це чудово, але наскільки просідає продуктивність від його використання? Якщо порівнювати з голими циклами, то швидкість менше раз в 3-5. Якщо порівнювати з функціями для масивів, яким передаються анонімні функції, то в 2-4 рази. Так як передбачається, що за допомогою бібліотеки обробляються невеликі масиви даних, а складна обробка даних знаходиться за межами скрипта (в базі даних, в сторонньому веб-сервісі), то на ділі в масштабах всього скрипта втрати невеликі. Головне — сприйняття.

Так як з часу створення моєї бібліотеки YaLinqo на світ з'явилося ще два конкуренти, які дійсно є LINQ (тобто підтримують ледачі обчислення і інші базові можливості), то виникають позиви бібліотеки порівняти. Саме просте і логічне — порівняти функціональність і продуктивність. Принаймні це не буде побиттям немовлят, як у минулому порівнянні.

(А також поява конкурентів нарешті мотивувало мене викласти документацію YaLinqo онлайн.)

Дисклеймер: — це тести «на коліні». Вони не дають оцінити всі втрати в продуктивності. Зокрема, я зовсім не розглядаю споживання пам'яті. Частково тому, що я не знаю, як це нормально зробити. Якщо що, pull requests are welcome, що називається.

Читати далі →

Уніфікуємо поведінка LINQ to IEnumerable і LINQ to IQueriable в частині роботи з null значеннями. Частина друга. Своя реалізація IQueryProvider

У коментарях до першої частини мені справедливо зробили зауваження, що я обіцяв уніфікацію IEnumerable і IQueriable, а сам сховав їх за самописным інтерфейсом типу репозиторію. У цій статті я постараюся виправиться і дати приклад що ж робити, якщо ми хочемо працювати з LINQ безпосередньо. Для цього я запропоную власну реалізацію інтерфейсу IQueryProvider.

GitHub
Nuget


Читати далі →