你需要把它写成:
public List<T> ConvertQueryToList<T>(IQueryable<T> query)
{
return query.ToList();
}
这将导致IQueryable<T>返回适当的List<T>,因为该Enumerable.ToList()方法需要一个IEnumerable<T>as 输入(它也适用于IQueryable<T>, as IQueryable<T>inheritsIEnumerable<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;
}