使用LINQ和ArrayList
我最近使用过LINQ
在以下代码中:
ArrayList list = new ArrayList(); var myStrings = list.AsQueryable().Cast();
什么是AsQueryable
? 我知道Cast
创建了一个类型安全的集合,并且不推荐使用ArrayList
。
我有一个朋友说他需要结合ArrayList
的AsQueryable
。 我试图理解为什么,但我不明白为什么需要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();