需要IQueryable ToArray和ToList链接

jul*_*o.g 0 c# linq

我正在做一个Pluralsight课程,其中作者正在解释为了返回一个正确的集合(而不是作为实体框架查询结果的Lazily加载的集合),它需要进行ToArray操作.到目前为止IQueryable一切都那么好,但后来他解释说,你不能这样做ToArray(),所以他需要真正做到query.ToList().ToArray();

你真的需要这两种方法吗?我已修改代码,似乎与ToList()使用相同ToArray()(该方法应返回IEnumerable<T>).

Cam*_*ron 5

这似乎......关闭.MSDN关于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);
 }
Run Code Online (Sandbox Code Playgroud)

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

现在,以下方法不会:

 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(); 
 }
Run Code Online (Sandbox Code Playgroud)