使用LINQ和ArrayList

我最近使用过LINQ

在以下代码中:

ArrayList list = new ArrayList(); var myStrings = list.AsQueryable().Cast(); 

什么是AsQueryable ? 我知道Cast创建了一个类型安全的集合,并且不推荐使用ArrayList

我有一个朋友说他需要结合ArrayListAsQueryable 。 我试图理解为什么,但我不明白为什么需要AsQueryable

他错了吗?

AsQueryable将用于生成IQueryable,然后,如果实现,可以通过表达式树分析查询以重写它或将其翻译成其他语言,例如linq to sql。

在这种情况下,它是完全没有意义的,你可以告诉你的朋友不要打扰。

您不需要调用AsQueryable() 。 只有当LINQ查询(用C#表示)需要转换为另一种域语言(例如SQL)时,才可以使用可查询。 在您的情况下,因为您正在使用LINQ to Objects(您在数组列表上运行),所以不需要这样做。

您可以直接在列表实例上调用Cast()方法。 另一种选择是从强类型集合开始,例如List

使用AsQueryable()的唯一效果是使查询结果的静态类型为IQueryable 。 对于所有意图和目的,这在对象上实际上是无用的。

你真的需要:

 var myStrings = list.Cast(); 

没有AsQueryable() 。 然后结果的类型就是IEnumerable

或者更好的是,获得强类型List

 var myStrings = list.Cast().ToList();