Sobes.tech
Middle
111
questionbank

Приведите пример выполнения кода, в котором возвращается объект интерфейса IQueryable.

Ответ от нейросети

sobes.tech AI

using System;
using System.Collections.Generic;
using System.Linq;

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public static class ProductService
{
    public static IQueryable<Product> GetProducts()
    {
        // Имитируем источник данных, например, базу данных
        // В реальном приложении это может быть DbSet из Entity Framework
        var products = new List<Product>
        {
            new Product { Id = 1, Name = "Laptop", Price = 1200.00m },
            new Product { Id = 2, Name = "Mouse", Price = 25.00m },
            new Product { Id = 3, Name = "Keyboard", Price = 75.00m },
            new Product { Id = 4, Name = "Monitor", Price = 300.00m },
        }.AsQueryable(); // Преобразуем IEnumerable в IQueryable

        return products;
    }

    public static void Main(string[] args)
    {
        // Получаем IQueryable
        IQueryable<Product> queryableProducts = GetProducts();

        // Добавляем фильтрацию и сортировку, которые будут выполнены ЛЕНИВО
        // при материализации данных (например, при вызове ToList() или foreach)
        var expensiveProducts = queryableProducts
            .Where(p => p.Price > 100m)
            .OrderBy(p => p.Name);

        // На этом этапе запрос еще не выполнен.
        Console.WriteLine("Запрос сформирован, но еще не выполнен.");

        // Материализация данных - выполнение запроса к источнику
        Console.WriteLine("Выполнение запроса:");
        foreach (var product in expensiveProducts)
        {
            Console.WriteLine($"- Id: {product.Id}, Name: {product.Name}, Price: {product.Price:C2}");
        }

        // Пример еще одной материализации
        var productList = expensiveProducts.ToList(); // Запрос выполняется еще раз, если не кешируется
        Console.WriteLine($"\nКоличество дорогих продуктов: {productList.Count}");
    }
}
Запрос сформирован, но еще не выполнен.
Выполнение запроса:
- Id: 1, Name: Laptop, Price: $1,200.00
- Id: 4, Name: Monitor, Price: $300.00

Количество дорогих продуктов: 2