如果我尝试这样做,它会起作用:
var query = myContextObject.Users.Where(u=>u.Name == "John");
query.ToList();
我可以调用 ToList
和许多其他扩展方法。
但如果我尝试这样做:
public List ConvertQueryToList(IQueryable query)
{
return query.ToList();
}
ToList
将无法访问,我猜这是因为 ToList
是一个扩展方法,但是 ToList
是怎么回事附在第一个例子中?
在第二种情况下是否可以访问ToList
?
最佳答案
你需要这样写:
public List<T> ConvertQueryToList<T>(IQueryable<T> query)
{
return query.ToList();
}
这将导致 IQueryable<T>
返回适当的List<T>
, 自 Enumerable.ToList()
方法需要 IEnumerable<T>
作为输入(也适用于 IQueryable<T>
,如 IQueryable<T>
inherits 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;
}
关于c# - ToList() 方法在哪里? (可查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254855/