你需要把它写成:
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;
}