あなたはそれを次のように書く必要があります:
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;
}