あなたはそれを次のように書く必要があります:
public List<T> ConvertQueryToList<T>(IQueryable<T> query)
{
return query.ToList();
}
これにより、IQueryable<T>
は適切なを返します。これList<T>
は、Enumerable.ToList()
メソッドがIEnumerable<T>
as入力を必要とするためです(これはIQueryable<T>
、IQueryable<T>
継承IEnumerable<T>
としても機能します)。
そうは言っても、このように使用する理由は実際にはありません。ToList()
作成する必要がある場合は、いつでも直接呼び出すことができますList<T>
。2番目のレイヤー内で抽象化すると、APIがさらに混乱します。
非ジェネリックIQueryableインターフェースを変換しようとしている場合は、次のようなことを行う必要があります。
public List<T> ConvertQueryToList<T>(IQueryable query)
{
return query.Cast<T>.ToList();
}
これには、次のように呼び出す必要があります。
var results = ConvertQueryToList<SomeType>(queryable);
または、この非ジェネリック(これはお勧めしません)のままにしておきたい場合は、次を使用できます。
public ArrayList ConvertQueryToList(IQueryable query)
{
ArrayList results = new ArrayList();
results.AddRange(query.Cast<object>().ToList());
return results;
}