Where is the ToList() method? (IQueryable)
You need to write it as:
public List<T> ConvertQueryToList<T>(IQueryable<T> query)
{
return query.ToList();
}
This will cause the IQueryable<T>
to return the appropriate List<T>
, since the Enumerable.ToList()
method requires an IEnumerable<T>
as input (which also works with IQueryable<T>
, as IQueryable<T>
inherits IEnumerable<T>
).
That being said, there is really no reason to use it this way. You can always just call ToList()
directly if you need to create a List<T>
- abstracting inside of a second layer just confuses the API further.
If you're trying to convert a non-generic IQueryable interface, you would need to do something like:
public List<T> ConvertQueryToList<T>(IQueryable query)
{
return query.Cast<T>.ToList();
}
This would then require calling like:
var results = ConvertQueryToList<SomeType>(queryable);
Alternatively, if you want to leave this non-generic (which I wouldn't recommend), then you could use:
public ArrayList ConvertQueryToList(IQueryable query)
{
ArrayList results = new ArrayList();
results.AddRange(query.Cast<object>().ToList());
return results;
}
The first of your examples returns an IQueryable<T>
, whereas in the second you're using IQueryable
(without the Generic Type parameter).
You can check out the two completely different interfaces here and here.