118

の目的は、を期待する可能性AsQueryable()のある to メソッドに渡すことができるようにするためですか、それともとして表現する有用な理由はありますか? たとえば、次のような場合に想定されますか。IEnumerableIQueryableIEnumerableIQueryable

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バージョンは、一度実行すると同じことをすることになる Expression を構築するだけですか? 私の主な質問は、を使用する実際のユースケースはAsQueryable何ですか?

4

5 に答える 5

4

インターフェイスIQueryable引用ドキュメント:

IQueryable インターフェイスは、クエリ プロバイダーによる実装を目的としています。

そのため、データ構造を .NET でクエリ可能にしようとしている人にとっては、その必要のないデータ構造を列挙するか、有効な enumerator を持つことができます

IEnumerator代わりに、データのストリームを繰り返し処理するためのインターフェイスです。

于 2013-06-28T14:27:20.693 に答える