gpt4 book ai didi

c# - ToList() 方法在哪里? (可查询)

转载 作者:可可西里 更新时间:2023-11-01 08:16:27 25 4
gpt4 key购买 nike

如果我尝试这样做,它会起作用:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com