Join в LINQ

SQL для выполнения объединения данных из нескольких таблиц предусматривает четыре вида объединений:

  • INNER JOIN (или просто JOIN) — возвращает те (и только те) записи из двух таблиц, которые отвечают условию ON (остальные записи в выборку не попадают)
  • LEFT OUTER JOIN (или просто LEFT JOIN) — возвращает все записи первой (левой) таблицы и отвечающие условию ON записи из второй (правой) таблицы; если для записи из первой таблицы нет соответствий во второй таблице, то она все равно попадет в выборку, а запись из второй таблицы будет заменена на NULL
  • RIGHT OUTER JOIN (или просто RIGHT JOIN) — тоже самое, что и LEFT JOIN, но таблицы меняются местами, т.е. возвращаются все записи из второй таблицы и отвечающие условию ON записи из первой таблицы или NULL
  • FULL OUTER JOIN — возвращает все записи из первой таблицы и все записи из второй таблицы, объединяя их по условию ON, при этом в обеих таблицах недостающие соотвеnствия заменяются на NULL

В LINQ все виды объединений можно выполнить с помощью выражений join и into в синтаксисе запросов и операторов Join()GroupJoin(), DefaultIfEmpty() и Union() в синтаксисе методов.

Читать далее Join в LINQ

LINQ C#

LINQ — Language Integrated Query (Внутриязыковой запрос) — технология, представляющая собой набор функций, позволяющих писать структурированные типобезопасные запросы к локальным объектам-коллекциям и удаленным источникам данных.

С помощью LINQ можно писать запросы к любой коллекции, реализующей интерфейсIEnumerable<>, например, к массивам, спискам (list), XML DOM, удаленным источникам данных, таким как таблицы SQL сервера. LINQ объединяет преимущества динамических запросов и проверки типов при компиляции.

Читать далее LINQ C#

Перечисления и коллекции в C#

Платформа .NET содержит набор типов для хранения и управления коллекциями объектов: списки с изменяемыми размерами, связанные списки, отсортированные и неотсортированные словари, массивы.

Читать далее Перечисления и коллекции в C#

Потоки (Streams) и ввод-вывод (IO) в C#

Ввод-вывод строится на основе потоков. Большинство классов для работы с потоками и вводом-выводом находится в пространстве имен System.IO.

Читать далее Потоки (Streams) и ввод-вывод (IO) в C#

Сериализация (Serialization) в C#

Сериализация — процесс преобразования объекта или группы связанных объектов в поток байт или набор XML узлов для сохранения (в базу данных, файл и т.д.) или передачи (например, по сети). Десериализация — обратный процесс — восстановление объекта из потока байт или XML узлов. Сериализация обычно используется для передачи объектов по сети или за границы приложения, для сохранения объектов внутри файлов или базы данных, а также для глубокого копирования объектов.

Классы для сериализации располагаются в двух пространствах имен: System.Runtime.Serialization и System.Xml.Serialization.

Читать далее Сериализация (Serialization) в C#

Рефлексия (отражение, reflection) в C#

Программа компилируется в сборку, которая содержит метаданные, скомпилированный код и ресурсы. Инспектирование метаданных и скомпилированного кода во время выполнения называется рефлексией.

Читать далее Рефлексия (отражение, reflection) в C#

Сборка мусора, IDisposable и финализаторы в C#

Память, занятая неиспользуемыми объектами, должна освобождаться. Этот процесс выполняется средой CLR автоматически и называется сборкой мусора. Однако помимо управляемой памяти существуют и другие машинные ресурсы, которые может использовать программа: файлы, дескрипторы ОС, сетевые подключения и т.д. Эти ресурсы сборщиком мусора не освобождаются. Типы, инкапсулирующие работу с машинными ресурсами, должны освобождать эти ресурсы после завершения работы с ними самостоятельно. Освобождение реализуется с помощью интерфейса IDisposable. Освобождение вызывается явно, в то время как сборка мусора полностью автоматизирована и не требует никаких действий со стороны программиста.

Читать далее Сборка мусора, IDisposable и финализаторы в C#