Middle
110
questionbank
Приведите пример выполнения кода, в котором возвращается объект интерфейса IQueryable.
Answer from AI
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