之间有什么区别
(db.Records as IEnumerable<Record>).Where(...)
和
(db.Records.AsEnumerable()).Where(...).
AsEnumerable()
只是source as IEnumerable<T>
的快捷方式吗?
我已阅读https://msdn.microsoft.com/en-us/library/bb335435(v=vs.90).aspx,但未找到任何相关信息。
答案 0 :(得分:6)
不同之处在于,您可以在AsEnumerable
上致电IEnumerable<T>
,其中T
是匿名类型,并且您无法对此类序列执行此类投射,因为您无法输入没有名称的类型的名称。 AsEnumerable
推断泛型参数的这种能力是它存在的原因。
(它也可以说是更清晰的语法,但在匿名类型之外,这不是功能差异,仅仅是个人偏好。)
答案 1 :(得分:0)
该文章有两个相关部分。
首先,
AsEnumerable(IEnumerable)方法除了将源代码的编译时类型从实现IEnumerable的类型更改为IEnumerable本身外无效。
第二,
如果不需要远程执行,例如因为谓词调用本地方法,则AsEnumerable方法可用于隐藏自定义方法,而是使标准查询运算符可用。
换句话说,是的,它看起来像一个捷径。但是,它意味着在Where
和其他IEnumerable<T>
方法的内存操作中强制执行基础类型的实际实现。