Является ли цель AsQueryable()
просто тем, чтобы вы могли передать IEnumerable
метод ожидаемым методам IQueryable
, или есть полезная причина для представления IEnumerable
как IQueryable
? Например, это должно быть в таких случаях:
IEnumerable<Order> orders = orderRepo.GetAll();
// I don't want to create another method that works on IEnumerable,
// so I convert it here.
CountOrders(orders.AsQueryable());
public static int CountOrders(IQueryable<Order> ordersQuery)
{
return ordersQuery.Count();
}
Или это действительно заставляет его делать что-то другое:
IEnumerable<Order> orders = orderRepo.GetAll();
IQueryable<Order> ordersQuery = orders.AsQueryable();
IEnumerable<Order> filteredOrders = orders.Where(o => o.CustomerId == 3);
IQueryable<Order> filteredOrdersQuery = ordersQuery.Where(o => o.CustomerId == 3);
// Are these executed in a different way?
int result1 = filteredOrders.Count();
int result2 = filteredOrdersQuery.Count();
Создают ли IQueryable
версии этих методов расширения просто выражение, которое в конечном итоге делает то же самое после его выполнения? Мой главный вопрос: каков реальный вариант использования AsQueryable
?
источник
IQueryable<T>
происходит отIEnumerable<T>
Пожалуйста , вы можете объяснить , что вы имеете в виду под «не-перечислимой основой IQueryable»?IQueryable
который представляет собой нечто большее, чем просто оберткуIEnumerable
, и на самом деле использует дополнительные возможностиIQueryable
.Самый верный случай для AsQueryable - это модульное тестирование. Скажем, у меня есть следующий несколько надуманный пример
и я хочу написать модульный тест, чтобы убедиться, что контроллер возвращает результаты, возвращенные из репозитория. Это выглядело бы примерно так:
где на самом деле все, что позволяет мне метод AsQueryable (), - это удовлетворять компилятор при настройке макета.
Мне было бы интересно, где это используется в коде приложения.
источник
Как отметил Сандзюро, цель AsQueryable () объясняется в разделе Использование AsQueryable с Linq To Objects и Linq To SQL . В частности, в статье говорится:
источник
Цель AsQueryable () подробно объясняется в этой статье Использование AsQueryable с Linq To Objects и Linq To SQL.
Из раздела «Примечания» метода MSDN Queryable.AsQueryable:
Это именно то, что упоминается и используется в статье выше. В вашем примере это зависит от того, что возвращается orderRepo.GetAll, IEnumerable или IQueryable (Linq to Sql). Если он возвращает IQueryable, метод Count () будет выполнен в базе данных, в противном случае он будет выполнен в памяти. Внимательно посмотрите на пример в указанной статье.
источник
IQueryable
Цитата из документации по интерфейсу :Таким образом, для тех, кто намеревается сделать свою обработку данных доступной для запросов в .NET, эта структура данных, в которой нет необходимости, может быть перечислена или иметь действительный перечислитель .
IEnumerator
- это интерфейс для итерации и обработки потока данных .источник
IQueryable
иIEnumerable
, но не понимаю варианта использованияAsQueryable
метода расширения. Я немного запутался в этом предложении, которое, как я подозреваю, может иметь ответ, который я ищу (на основе голосов).AsQueryable()
?» Если я начиная с IEnumerable (что - то уже способным создавать возможность перечисления), то почему бы мне нужно преобразовать , чтобы сIQueryable
помощью метода расширенияAsQueryable()
? Может быть, небольшой пример кода, чтобы проиллюстрировать, где это может пригодиться? Кажется, я что-то упускаю в вашем объяснении. Спасибо за ваше время.linq to sql
,linq to xml
и поэтому ... если вы хотите написатьlinq
драйвер, нацеленный на ваши структуры данных (linq to your data
), чтобы пользователи вашего api имели возможность запускатьlinq
запросы к вашим структурам данных, вы должны выбратьIQueryable
IQueryable
иIEnumerable
. Я знаю разницу, и я не об этом прошу. Я спрашиваю , почему кто - то хотел взять что - то , что орудияIEnumerable
, и превратить его вIQueryable
использованииAsQueryable
метод расширения. Это то, что вы отвечаете? Я все еще не могу сказать ..