Forwarded from Machinelearning
Проект объединяет использование LLM, векторные базы данных для выполнения задач поиска, оценки, ризонинга на основе предоставленных данных (файлы, текст, источники).
Позиционируется разработчиками как инструмент для управления знаниями предприятия, интеллектуальных QA-систем и сценариев поиска информации.
DeepSearcher умеет использовать при необходимости информацию из интернета, совместим с векторными базами Milvus и их сервис-провайдером Zilliz Cloud, эмбедингами Pymilvus, OpenAI и VoyageAI. Есть возможность подключения LLM DeepSeek и OpenAI по API напрямую или через TogetherAI и SiliconFlow.
Поддерживается локальная загрузка файлов, подключение веб-краулеров FireCrawl, Crawl4AI и Jina Reader.
В ближайших планах - добавление возможности веб-клиппера, расширение списка поддерживаемых векторных баз, создание RESTful API интерфейса.
# Clone the repository
git clone https://github.com/zilliztech/deep-searcher.git
# Create a Python venv
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies
cd deep-searcher
pip install -e .
# Quick start demo
from deepsearcher.configuration import Configuration, init_config
from deepsearcher.online_query import query
config = Configuration()
# Customize your config here
config.set_provider_config("llm", "OpenAI", {"model": "gpt-4o-mini"})
init_config(config = config)
# Load your local data
from deepsearcher.offline_loading import load_from_local_files
load_from_local_files(paths_or_directory=your_local_path)
# (Optional) Load from web crawling (`FIRECRAWL_API_KEY` env variable required)
from deepsearcher.offline_loading import load_from_website
load_from_website(urls=website_url)
# Query
result = query("Write a report about xxx.") # Your question here
@ai_machinelearning_big_data
#AI #ML #Agents #DeepSearcher
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 "PagingTagHelper" на mostlylucid.net рассказывает о создании и использовании собственного PagingTagHelper для ASP.NET Core.
▪ Цель статьи: объяснить, как реализовать механизм пагинации в веб-приложениях с помощью tag helper-ов.
▪ Ключевые моменты:
• Разбор принципов работы tag helper-ов в ASP.NET Core.
• Пошаговое создание кастомного PagingTagHelper, который генерирует HTML-разметку для навигации по страницам.
• Примеры кода и объяснения параметров, позволяющих настраивать внешний вид и функциональность пагинации.
▪ Полезность:
• Помогает разработчикам быстро интегрировать удобную пагинацию в свои проекты.
• Обеспечивает более гибкое и кастомное управление навигацией по большим наборам данных.
Статья будет полезна всем, кто хочет улучшить пользовательский интерфейс своего ASP.NET Core приложения с помощью собственных решений для пагинации.
📌 Читать
▪ Цель статьи: объяснить, как реализовать механизм пагинации в веб-приложениях с помощью tag helper-ов.
▪ Ключевые моменты:
• Разбор принципов работы tag helper-ов в ASP.NET Core.
• Пошаговое создание кастомного PagingTagHelper, который генерирует HTML-разметку для навигации по страницам.
• Примеры кода и объяснения параметров, позволяющих настраивать внешний вид и функциональность пагинации.
▪ Полезность:
• Помогает разработчикам быстро интегрировать удобную пагинацию в свои проекты.
• Обеспечивает более гибкое и кастомное управление навигацией по большим наборам данных.
Статья будет полезна всем, кто хочет улучшить пользовательский интерфейс своего ASP.NET Core приложения с помощью собственных решений для пагинации.
📌 Читать
⚡️ Wait4X — это высокоэффективный инструмент без внешних зависимостей, который обеспечивает ожидание готовности сервисов перед продолжением работы.
▪ Поддержка различных протоколов и сервисов: делает его незаменимым для:
CI/CD конвейеров: гарантирует, что все зависимости доступны перед запуском тестов.
Оркестрации контейнеров: проверяет работоспособность служб перед стартом приложения.
Процессов развертывания: удостоверяется в готовности системы до начала деплоя.
Инициализации приложения: проверяет доступность внешних сервисов.
Локальной разработки: упрощает контроль готовности локального хоста.
▪ Основные возможности:
Поддержка нескольких протоколов: TCP, HTTP, DNS.
Интеграция с сервисами: Redis, MySQL, PostgreSQL, MongoDB, RabbitMQ, InfluxDB, Temporal.
Обратная проверка для выявления свободных портов или неготовых служб.
Параллельная проверка нескольких сервисов одновременно.
Экспоненциальное повторение попыток с увеличивающимися задержками для повышения надежности.
Интеграция с CI/CD для автоматизации рабочих процессов.
Кроссплатформенность: единый двоичный файл для Linux, macOS и Windows.
Импорт пакетов Go в приложения на Go.
Выполнение команд после успешного прохождения проверок.
Узнайте больше на GitHub: https://github.com/atkrad/wait4x
▪ Поддержка различных протоколов и сервисов: делает его незаменимым для:
CI/CD конвейеров: гарантирует, что все зависимости доступны перед запуском тестов.
Оркестрации контейнеров: проверяет работоспособность служб перед стартом приложения.
Процессов развертывания: удостоверяется в готовности системы до начала деплоя.
Инициализации приложения: проверяет доступность внешних сервисов.
Локальной разработки: упрощает контроль готовности локального хоста.
▪ Основные возможности:
Поддержка нескольких протоколов: TCP, HTTP, DNS.
Интеграция с сервисами: Redis, MySQL, PostgreSQL, MongoDB, RabbitMQ, InfluxDB, Temporal.
Обратная проверка для выявления свободных портов или неготовых служб.
Параллельная проверка нескольких сервисов одновременно.
Экспоненциальное повторение попыток с увеличивающимися задержками для повышения надежности.
Интеграция с CI/CD для автоматизации рабочих процессов.
Кроссплатформенность: единый двоичный файл для Linux, macOS и Windows.
Импорт пакетов Go в приложения на Go.
Выполнение команд после успешного прохождения проверок.
Узнайте больше на GitHub: https://github.com/atkrad/wait4x
⚡️ Google представил OSV-Scanner v2
Новая версия OSV-Scanner значительно расширяет возможности для разработчиков:
• Теперь сканируются проекты на .NET, Python, Java, JS, Go, Haskell — включая такие форматы, как deps.json, uv.lock, bun.lock, Uber Jars и др.
• Сводка по уязвимостям с фильтрами по критичности, пакетам, слоям в виде интерактивного HTML-отчёта
• Если вы используете Java с Maven, инструмент подскажет, как безопасно обновить уязвимые зависимости с минимальными рисками.
• Анализ образов Debian, Ubuntu и Alpine с определением уязвимых пакетов, историей слоев, идентификацией базового образа и фильтрацией ложных срабатываний
📌 Релиз
Новая версия OSV-Scanner значительно расширяет возможности для разработчиков:
• Теперь сканируются проекты на .NET, Python, Java, JS, Go, Haskell — включая такие форматы, как deps.json, uv.lock, bun.lock, Uber Jars и др.
• Сводка по уязвимостям с фильтрами по критичности, пакетам, слоям в виде интерактивного HTML-отчёта
• Если вы используете Java с Maven, инструмент подскажет, как безопасно обновить уязвимые зависимости с минимальными рисками.
• Анализ образов Debian, Ubuntu и Alpine с определением уязвимых пакетов, историей слоев, идентификацией базового образа и фильтрацией ложных срабатываний
📌 Релиз
🎯 NVIDIA k8s-device-plugin
Этот репозиторий содержит NVIDIA Device Plugin для Kubernetes. Он позволяет автоматически обнаруживать и предоставлять GPU-ресурсы NVIDIA в кластере Kubernetes.
📌 Поддерживаемые функции:
- Автоматическое обнаружение GPU
- Выделение GPU для контейнеров
- Поддержка Multi-Instance GPU (MIG)
- Интеграция с nvidia-container-toolkit
- Гибкая настройка через параметры и конфигурации
Установка плагина осуществляется через манифесты, доступные в папке deployments/. Проект активно развивается и поддерживается NVIDIA.
Полезен, если вы работаете с ML/AI-ворклоудами в Kubernetes и хотите использовать ресурсы GPU эффективно и прозрачно.
https://github.com/NVIDIA/k8s-device-plugin
Этот репозиторий содержит NVIDIA Device Plugin для Kubernetes. Он позволяет автоматически обнаруживать и предоставлять GPU-ресурсы NVIDIA в кластере Kubernetes.
📌 Поддерживаемые функции:
- Автоматическое обнаружение GPU
- Выделение GPU для контейнеров
- Поддержка Multi-Instance GPU (MIG)
- Интеграция с nvidia-container-toolkit
- Гибкая настройка через параметры и конфигурации
Установка плагина осуществляется через манифесты, доступные в папке deployments/. Проект активно развивается и поддерживается NVIDIA.
Полезен, если вы работаете с ML/AI-ворклоудами в Kubernetes и хотите использовать ресурсы GPU эффективно и прозрачно.
https://github.com/NVIDIA/k8s-device-plugin
GitHub
GitHub - NVIDIA/k8s-device-plugin: NVIDIA device plugin for Kubernetes
NVIDIA device plugin for Kubernetes. Contribute to NVIDIA/k8s-device-plugin development by creating an account on GitHub.
В этом блоге рассказывает о новой функции Visual Studio, которая автоматически генерирует комментарии документации с помощью GitHub Copilot. Главные моменты:
▪ При вводе три слэшей (например, «///») редактор предлагает готовые комментарии, которые включают краткое описание функции, её параметры и возвращаемое значение.
▪ Функция доступна в Visual Studio 17.14 Preview 2 для проектов на C# и C++, с возможностью настройки стилей комментариев (XML или Doxygen для C++).
▪ Для использования требуется подписка на GitHub Copilot.
▪ Microsoft призывает разработчиков тестировать нововведение и оставлять обратную связь для дальнейшего улучшения инструмента.
Эта функция существенно упрощает процесс документирования кода и повышает продуктивность работы разработчиков.
Читать
▪ При вводе три слэшей (например, «///») редактор предлагает готовые комментарии, которые включают краткое описание функции, её параметры и возвращаемое значение.
▪ Функция доступна в Visual Studio 17.14 Preview 2 для проектов на C# и C++, с возможностью настройки стилей комментариев (XML или Doxygen для C++).
▪ Для использования требуется подписка на GitHub Copilot.
▪ Microsoft призывает разработчиков тестировать нововведение и оставлять обратную связь для дальнейшего улучшения инструмента.
Эта функция существенно упрощает процесс документирования кода и повышает продуктивность работы разработчиков.
Читать
Forwarded from C# (C Sharp) programming
🔥 Claude теперь интегрирован в Unity, Blender и Unreal Engine — MCP-плагины остаются в центре внимания! Теперь для создания игры достаточно лишь клавиатуры.
• Claude в Unity— генерирует геймплейные механики (физику, цели, таймеры), окружение, эффекты, интерфейсы, миникарты и многое другое.
• Claude в Blender — мгновенно создаёт 3D-модели и сцены, превращает фотографии в игровые локации и редактирует их по вашим командам.
• Claude в Unreal Engine — создаёт объекты, задаёт им форму и разрабатывает их логику всего за несколько минут.
Сохраняйте и пробуйте в деле! 🚀
• Claude в Unity— генерирует геймплейные механики (физику, цели, таймеры), окружение, эффекты, интерфейсы, миникарты и многое другое.
• Claude в Blender — мгновенно создаёт 3D-модели и сцены, превращает фотографии в игровые локации и редактирует их по вашим командам.
• Claude в Unreal Engine — создаёт объекты, задаёт им форму и разрабатывает их логику всего за несколько минут.
Сохраняйте и пробуйте в деле! 🚀
Интерактивный инструмент, который поможет разобраться в работе ключевых алгоритмов сортировки.
Возможности:
— сортирует массив трёхзначных чисел;
— регулирует скорость;
— запускает, останавливает, сбрасывает процесс;
— создаёт случайный массив.
🔗 GitHub
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Awesome на GitHub
Это курируемые подборки ресурсов (книг, статей, инструментов, библиотек и многое другое) по конкретным темам, созданные сообществом разработчиков и энтузиастов.
Собрали подборку лучших из них. Сохраняйте, чтобы не потерять
• C: awesome-c
• C++: awesome-cpp
• C#: awesome-dotnet
• Хакинг: https://github.com/Hack-with-Github/Awesome-Hacking
• Информационная безопасность: awesome-security
• Базы данных: awesome-database-learning
• JavaScript: awesome-javascript
• React: awesome-react
• Vue: awesome-vue
• Angular: awesome-angular
• Node.js: awesome-nodes
• Typescript: awesome-typescript
• Java: awesome-java
• Go: awesome-go
• Ruby: awesome-ruby
• PHP: awesome-php
• Kotlin: awesome-kotlin
• Rust: awesome-rust
• Swift: awesome-swift
• iOS-разработка: awesome-ios
• Android-разработка: awesome-android
• Unreal Engine: awesome-unreal
• Unity: awesome-unity3d
• Python: awesome-python
• Django: awesome-django
• Data Science: awesome-datascience
• TensorFlow: awesome-tensorflow
• Linux: Awesome-Linux-Software
• DevOps: awesome-devops
• SysAdmins: awesome-sysadmin
• Nginx: awesome-nginx
• Kubernetes: awesome-kubernetes
• Docker: awesome-docker
• Автоматизация сетевой инфраструктуры: awesome-network-automation
• QA: awesome-testing
@cpluscsharp
Это курируемые подборки ресурсов (книг, статей, инструментов, библиотек и многое другое) по конкретным темам, созданные сообществом разработчиков и энтузиастов.
Собрали подборку лучших из них. Сохраняйте, чтобы не потерять
• C: awesome-c
• C++: awesome-cpp
• C#: awesome-dotnet
• Хакинг: https://github.com/Hack-with-Github/Awesome-Hacking
• Информационная безопасность: awesome-security
• Базы данных: awesome-database-learning
• JavaScript: awesome-javascript
• React: awesome-react
• Vue: awesome-vue
• Angular: awesome-angular
• Node.js: awesome-nodes
• Typescript: awesome-typescript
• Java: awesome-java
• Go: awesome-go
• Ruby: awesome-ruby
• PHP: awesome-php
• Kotlin: awesome-kotlin
• Rust: awesome-rust
• Swift: awesome-swift
• iOS-разработка: awesome-ios
• Android-разработка: awesome-android
• Unreal Engine: awesome-unreal
• Unity: awesome-unity3d
• Python: awesome-python
• Django: awesome-django
• Data Science: awesome-datascience
• TensorFlow: awesome-tensorflow
• Linux: Awesome-Linux-Software
• DevOps: awesome-devops
• SysAdmins: awesome-sysadmin
• Nginx: awesome-nginx
• Kubernetes: awesome-kubernetes
• Docker: awesome-docker
• Автоматизация сетевой инфраструктуры: awesome-network-automation
• QA: awesome-testing
@cpluscsharp
⚡️ .NET: валидация Minimal API
В .NET 8 Preview 3 появилась встроенная поддержка валидации для Minimal API — теперь можно использовать атрибуты Required, Range, StringLength и другие прямо в минималистичных контроллерах без лишнего кода.
⚙️ Microsoft добавила официальный пример:
🔗 github.com/captainsafia/minapi-validation-support
🧪 В проекте показано:
- как включить AddValidation() в Program.cs
- как использовать
- как обрабатывать ошибки валидации автоматически
🚀 Чтобы запустить пример:
✍️ Минимализм + строгая валидация = 🔥 для API!
📌 Github
@csharp_1001_notes
В .NET 8 Preview 3 появилась встроенная поддержка валидации для Minimal API — теперь можно использовать атрибуты Required, Range, StringLength и другие прямо в минималистичных контроллерах без лишнего кода.
⚙️ Microsoft добавила официальный пример:
🔗 github.com/captainsafia/minapi-validation-support
🧪 В проекте показано:
- как включить AddValidation() в Program.cs
- как использовать
[ValidatableType]
для ваших моделей- как обрабатывать ошибки валидации автоматически
🚀 Чтобы запустить пример:
cd api
dotnet run
✍️ Минимализм + строгая валидация = 🔥 для API!
📌 Github
@csharp_1001_notes
🔧 Задача на C# для внимательных разработчиков
Что выведет следующий код?
Варианты ответа:
A)
B)
C)
D)
---
✅ Правильный ответ:B
Почему:
Лямбда-функции захватывают переменную по ссылке, а не её значение на каждой итерации. После завершения цикла , и все замыкания ссылаются на одно и то же . Это классическая ловушка замыканий в C#.
Что выведет следующий код?
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var actions = new List<Action>();
for (int i = 0; i < 3; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var action in actions)
action();
}
}
Варианты ответа:
A)
1
2
B)
3
3
C)
0
0
D)
---
✅ Правильный ответ:
Почему:
Лямбда-функции захватывают переменную
i
i == 3
i
В третьем предварительном выпуске .NET 10 Preview 3, Microsoft сосредоточила внимание на улучшении производительности, удобстве для разработчиков и современных облачных паттернах.
Хотя этот выпуск не содержит значимых новых функций, он предлагает значительные усовершенствования в различных областях.
🔧 Основные нововведения
🐳 Нативная публикация контейнеров для консольных приложений
Теперь консольные приложения могут создавать контейнерные образы с помощью команды:
Это стало возможным без необходимости устанавливать свойство <EnableSdkContainerSupport> в значение true в файле проекта. Если требуется отключить эту поддержку, можно установить это свойство в false.
📦 Управление форматом контейнерных образов
Разработчики получили возможность явно указывать формат контейнерного образа (.Docker или .OCI) с помощью нового свойства <ContainerImageFormat> в SDK. По умолчанию SDK выбирает формат на основе архитектуры контейнера и базового образа, но теперь это поведение можно переопределить, что особенно полезно для команд, стандартизирующихся на формате OCI.
🌐 Обновления для облачных и веб-приложений
ASP.NET Core: Добавлена поддержка OpenAPI 3.1, что обеспечивает лучшую интеграцию с современными API-шлюзами и инструментами проектирования. Также теперь можно обслуживать документы OpenAPI в формате YAML, что широко используется в инфраструктуре как код и DevOps-процессах.
Blazor Web Apps: Введён новый компонент ReconnectModal для более плавной обработки отключений клиента. Улучшения также коснулись компонента QuickGrid, включая условное стилизование строк и управление пользовательским интерфейсом. Навигация стала более предсказуемой, избегая ненужной прокрутки страниц и лучше обрабатывая строки запроса. Кроме того, скрипт фреймворка Blazor теперь обслуживается как статический веб-ресурс с отпечатком, улучшая кэширование и производительность, особенно в средах с CDN или на периферии сети.
⚙️ Дополнительные улучшения
Оптимизация SDK: Автоматическое удаление неиспользуемых ссылок на пакеты, предоставляемые фреймворком, что снижает использование диска и улучшает производительность сборки.
- Улучшения CLI:
Введены новые алиасы команд, такие как dotnet package add, для повышения ясности и согласованности командной строки.
Теперь можно генерировать скрипты автодополнения оболочки с помощью команды dotnet completions generate <SHELL> для bash, zsh, powershell и других.
В интерактивных терминалах команды CLI теперь по умолчанию работают в интерактивном режиме, упрощая взаимодействие с пользователем.
- Улучшения JIT-компилятора:
Возможность деинлайнить и инлайнить методы интерфейса на массивах, улучшая производительность в коде с интенсивным использованием коллекций.
Оптимизация перечисления массивов, позволяющая лучшую инлайнизацию JIT и размещение в стеке.
Поддержка инлайнинга методов, которые становятся деинлайненными после предыдущих шагов инлайнинга.
Разрешение размещения в стеке для небольших массивов фиксированного размера, состоящих из типов значений без указателей GC, снижая нагрузку на кучу.
- Новые API и улучшения:
Поддержка поиска сертификатов по отпечатку с использованием алгоритмов, отличных от SHA-1, таких как SHA-256.
Улучшения в кодировании PEM: API PEM теперь поддерживают чтение ASCII/UTF-8 текста напрямую, упрощая кроссплатформенную работу с ключами и сертификатами.
Поддержка DateOnly в ISOWeek: новые перегрузки для работы со значениями DateOnly в логике, основанной на неделях.
Нормализация строк для Span<char> и ReadOnlySpan<char>: новые API позволяют выполнять нормализацию Unicode напрямую на этих типах, снижая количество выделений памяти.
Для получения более подробной информации сюда
Хотя этот выпуск не содержит значимых новых функций, он предлагает значительные усовершенствования в различных областях.
🔧 Основные нововведения
🐳 Нативная публикация контейнеров для консольных приложений
Теперь консольные приложения могут создавать контейнерные образы с помощью команды:
dotnet publish /t:PublishContainer
Это стало возможным без необходимости устанавливать свойство <EnableSdkContainerSupport> в значение true в файле проекта. Если требуется отключить эту поддержку, можно установить это свойство в false.
📦 Управление форматом контейнерных образов
Разработчики получили возможность явно указывать формат контейнерного образа (.Docker или .OCI) с помощью нового свойства <ContainerImageFormat> в SDK. По умолчанию SDK выбирает формат на основе архитектуры контейнера и базового образа, но теперь это поведение можно переопределить, что особенно полезно для команд, стандартизирующихся на формате OCI.
🌐 Обновления для облачных и веб-приложений
ASP.NET Core: Добавлена поддержка OpenAPI 3.1, что обеспечивает лучшую интеграцию с современными API-шлюзами и инструментами проектирования. Также теперь можно обслуживать документы OpenAPI в формате YAML, что широко используется в инфраструктуре как код и DevOps-процессах.
Blazor Web Apps: Введён новый компонент ReconnectModal для более плавной обработки отключений клиента. Улучшения также коснулись компонента QuickGrid, включая условное стилизование строк и управление пользовательским интерфейсом. Навигация стала более предсказуемой, избегая ненужной прокрутки страниц и лучше обрабатывая строки запроса. Кроме того, скрипт фреймворка Blazor теперь обслуживается как статический веб-ресурс с отпечатком, улучшая кэширование и производительность, особенно в средах с CDN или на периферии сети.
⚙️ Дополнительные улучшения
Оптимизация SDK: Автоматическое удаление неиспользуемых ссылок на пакеты, предоставляемые фреймворком, что снижает использование диска и улучшает производительность сборки.
- Улучшения CLI:
Введены новые алиасы команд, такие как dotnet package add, для повышения ясности и согласованности командной строки.
Теперь можно генерировать скрипты автодополнения оболочки с помощью команды dotnet completions generate <SHELL> для bash, zsh, powershell и других.
В интерактивных терминалах команды CLI теперь по умолчанию работают в интерактивном режиме, упрощая взаимодействие с пользователем.
- Улучшения JIT-компилятора:
Возможность деинлайнить и инлайнить методы интерфейса на массивах, улучшая производительность в коде с интенсивным использованием коллекций.
Оптимизация перечисления массивов, позволяющая лучшую инлайнизацию JIT и размещение в стеке.
Поддержка инлайнинга методов, которые становятся деинлайненными после предыдущих шагов инлайнинга.
Разрешение размещения в стеке для небольших массивов фиксированного размера, состоящих из типов значений без указателей GC, снижая нагрузку на кучу.
- Новые API и улучшения:
Поддержка поиска сертификатов по отпечатку с использованием алгоритмов, отличных от SHA-1, таких как SHA-256.
Улучшения в кодировании PEM: API PEM теперь поддерживают чтение ASCII/UTF-8 текста напрямую, упрощая кроссплатформенную работу с ключами и сертификатами.
Поддержка DateOnly в ISOWeek: новые перегрузки для работы со значениями DateOnly в логике, основанной на неделях.
Нормализация строк для Span<char> и ReadOnlySpan<char>: новые API позволяют выполнять нормализацию Unicode напрямую на этих типах, снижая количество выделений памяти.
Для получения более подробной информации сюда
Вы используете локальные переменные в LINQ и используете let? 👇
Ключевое слово let позволяет вводить временную переменную прямо внутри запроса LINQ — как локальную переменную в цикле.
Разбивайте сложные вычисления на части
Делайте запрос модульнее и чище
Меньше проходов по данным → выше производительность
👉 Простой пример:
csharp
Ключевое слово let позволяет вводить временную переменную прямо внутри запроса LINQ — как локальную переменную в цикле.
Разбивайте сложные вычисления на части
Делайте запрос модульнее и чище
Меньше проходов по данным → выше производительность
👉 Простой пример:
csharp
from order in orders
let total = order.Items.Sum(i => i.Price * i.Quantity)
where total > 1000
let categories = order.Items.Select(i => i.Category).Distinct()
select new
{
OrderId = order.Id,
Total = total,
Categories = categories
};
let total
= … — вычисляем сумму заказа только один разwhere total >
1000 — фильтруем по готовому значениюlet categories =
… — собираем уникальные категории