-1

写在msdn上:

返回类型为 的输入IEnumerable<T>

我不明白。帮助我理解这种方法。

4

1 回答 1

1

有三种实现方式AsEnumerable

DataTableExtensions.AsEnumerable

扩展 aDataTable给它一个IEnumerable接口,这样你就可以对DataTable.

Enumerable.AsEnumerable<TSource>ParallelEnumerable.AsEnumerable<TSource>

AsEnumerable<TSource>(IEnumerable<TSource>)除了将源的编译时类型从实现的类型更改IEnumerable<T>为自身之外,该方法没有任何作用IEnumerable<T>

AsEnumerable<TSource>(IEnumerable<TSource>)IEnumerable<T>当序列实现但也有一组不同的公共查询方法可用时,可用于在查询实现之间进行选择 。例如,给定一个Table实现 IEnumerable<T>并拥有自己的方法(如WhereSelect和 )的泛型类,SelectMany调用Where将调用 的公共Where方法 TableTable表示数据库表 的类型可以具有Where将谓词参数作为表达式树并将树转换为 SQL 以进行远程执行的方法。如果不需要远程执行,例如因为谓词调用本地方法,则AsEnumerable<TSource>可以使用该方法隐藏自定义方法,而是使标准查询运算符可用。

换句话说。

如果我有一个

IQueryable<X> sequence = ...;

来自 Linq 提供程序,例如 Entity Framework,我这样做,

sequence.Where(x => SomeUnusualPredicate(x));

该查询将在服务器上编写和运行。这将在运行时失败,因为 Entity Framework 不知道如何转换SomeUnusualPredicate为 SQL。

如果我希望它改为使用 Linq to Objects 运行语句,我会这样做,

sequence.AsEnumerable().Where(x => SomeUnusualPredicate(x));

现在服务器将返回所有数据,并且将Enumerable.Where使用从 Linq 到对象的方法,而不是使用查询提供程序的实现。

Entity Framework不知道怎么解释没关系SomeUnusualPredicate,我的函数会直接使用。(但是,这可能是一种低效的方法,因为所有行都将从服务器返回。)

于 2014-05-19T09:14:32.110 回答