===== Зачем нужен LINQ ===== См. также: **[[product/linq/exaples|Примеры LINQ-запросов]]** \\ **[[https://docs.microsoft.com/ru-ru/dotnet/csharp/linq/|Официальная документация]]** В системе ADVANTA хранится множество данных, и чем больше система, больше настроек, больше пользователей, тем более информативные данные можно извлекать для анализа. Администратор Системы, зная особенности конкретной базы, может правильно построить нужный ему запрос, получив только те данные, которые ему нужны, не запрашивая доработку специализированного отчета в платформенном ПО, обходясь только настройками. [[product:reports|Типовые отчеты]] выбирают достаточно однородные данные. Чтобы их комбинировать, был сделан инструмент табличных отчетов -- [[product:reports:excel_table_report|отчёт "Электронная таблица"]]. Но для генерации «хитрых» отчетов приходится строить много отчетов источников, отчеты не знают ничего друг о друге и не меняют фильтры динамически, поэтому в табличных отчетах приходится строить источники с заведомо избыточными данными, которые может быть будут нужны для итогового отчета. \\ Формирование источников данных само по себе ресурсоемкая операция, а чем их для табличного отчета больше, тем хуже. Более того, полученные таким образом избыточные данные нужно формировать в итоговом листе формулами, отсекая ненужное. **Язык запросов LINQ решает эту задачу.** \\ **LINQ** -- (Language-Integrated Query) представляет простой язык запросов к источнику данных. Базовыми единицами данных в LINQ являются последовательности и элементы. * Последовательность — любой объект, реализующий обобщенный интерфейс IEnumerable. * Элемент — каждая единица последовательности. С LINQ администратор может делать: * быстрые отчеты в системе; * гибко получать только тот набор данных, который нужен для обработки и/или для написании скриптов интеграции. Выборка данных выполняется в контексте пользователя, т.е. с учетом его прав. ===== Где найти LINQ ===== **Администрирование -> Дополнительные сервисы -> Источники LINQ** ===== Особенности ===== Каждый созданный запрос имеет следующие свойства: * **Ключ** – это уникальное текстовое название запроса, для вызова из внешнего API и табличного отчета. * **Дата изменения** – дата последнего изменения запроса при его редактировании. * **Есть ошибки** – имеет значение «Да», в случае, если запрос не может быть скомпилирован. \\ Это удобный инструмент для обнаружения ошибок при изменении объектной модели в разделе администрирования и пересоздания контекста. * **Используется в диаграмме Ганта** – указывает на то, что данный запрос может быть использован для [[product/linq/gantt|настройки пользовательских колонок в диаграмме Ганта]]. Каждый запрос имеет свой **UID**, видимый в окне редактирования. Данный UID может использоваться в методе API и как источник в табличных отчетах. \\ **Ключ** запроса является альтернативой использованию UID. === Ключ желательно оформлять по следующим правилам: === * Используйте только латиницу * Допустимо использование цифр и символов "-", "_" * Не используйте пробелы