Интерфейс IQueryable
Интерфейс IQueryable<T> описывает отложенный запрос, который строит дерево выражений. Набор операторов совпадает с Enumerable, но вызовы записываются в дерево, а не выполняются сразу на месте. Для списка в памяти дерево получают через AsQueryable.
Синтаксис
IQueryable<T> query = list.AsQueryable().Where(x => x > 0);
Пример
Давайте получим IQueryable из списка и применим Where:
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> nums = new List<int> {1, 2, 3, 4, 5};
IQueryable<int> query = nums.AsQueryable().Where(n => n > 3);
List<int> res = query.ToList();
Console.WriteLine(string.Join(" ", res));
}
}
Результат выполнения кода:
"4 5"
Пример
Давайте проверим тип результата AsQueryable:
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> nums = new List<int> {1, 2, 3, 4, 5};
IQueryable<int> query = nums.AsQueryable();
Console.WriteLine(query.GetType().Name.StartsWith("EnumerableQuery"));
}
}
Результат выполнения кода:
True