Ответ 1
Вам нужно записать его как:
public List<T> ConvertQueryToList<T>(IQueryable<T> query)
{
return query.ToList();
}
Это приведет к тому, что IQueryable<T>
вернет соответствующий List<T>
, так как метод Enumerable.ToList()
требует ввода IEnumerable<T>
в качестве входного (который также работает с IQueryable<T>
, поскольку IQueryable<T>
наследует IEnumerable<T>
).
Таким образом, нет причин использовать его таким образом. Вы всегда можете просто вызвать ToList()
напрямую, если вам нужно создать List<T>
- абстрагирование внутри второго слоя просто путает 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;
}