需要IQueryable ToArray和ToList链接

时间:2015-04-06 22:34:27

标签: c# linq

我正在做一个Pluralsight课程,作者正在解释为了返回一个合适的集合(而不是作为实体框架查询结果的Lazily加载的集合),它需要做ToArray操作。到目前为止一直很好,但后来他解释说,在IQueryable你不能ToArray(),所以他需要实际做query.ToList().ToArray();

你真的需要两种方法吗?我修改了代码,似乎与ToList()一样,与ToArray()一样(预计该方法会返回IEnumerable<T>)。

1 个答案:

答案 0 :(得分:5)

这似乎......关闭。 MSDN's Documentation on IQueryable同时将ToList()ToArray()作为有效的扩展方法。

同时使用ToList()ToArray()似乎过于冗余,并且在大型集合中可能不具备性能(请不要在此引用我,纯粹猜测!:)

T[]List<T>都会实现IEnumerable<T>,只要该方法返回IEnumerable<T>,那么它就不重要了。

 public IEnumerable<int> GetNumbers()
 {
  return Enumerable.Range(0,10)
                   .ToList();
 }

 public IEnumerable<int> GetNumbers()
 {
  return Enumerable.Range(0,10)
                   .ToArray();
 }

 public IEnumerable<int> GetNumbers()
 {
  return Enumerable.Range(0,10);
 }

所有这些上述方法都将正确编译和构建。假设不在同一个班级,但这是一个不同的问题。

现在,以下方法赢得了

 public List<int> GetNumbers()
 {
  // Compile error as int[] and List<int> are different types
  return Enumerable.Range(0,10)
                   .ToArray(); 
 }

 public int[] GetNumbers()
 {
  // Compile error as int[] and List<int> are different types
  return Enumerable.Range(0,10)
                   .ToList(); 
 }