我有一个ASP.NET MVC应用程序。让我们假设我有这样的观点:
@model IEnumerable<MyClass>
.....在服务器端,我使用EF对我的数据库进行了一个linq查询:
public ActionResult Index()
{
var query = from t in context.MyClass
select t;
//now comes the question
return View(query);
return View(query.AsEnumerable()); //is there any difference?
}我认为没有必要使用AsEnumerable(),因为查询会自动转换到它,那么,当AsEnumerable()有用时,有人能解释我吗?
谢谢!
发布于 2014-05-27 12:39:19
这是不必要的。您声明的查询将生成一个序列,该序列实现了IEnumerable接口。
正如您将看到的,这里 (实现IEnumerable的类型的Select扩展方法)返回一个IEnumerable。
public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector)您的查询
var query = from t in context.MyClass
select t;将被汇编成
var query = context.MyClass.Select(x=>x);因此,我指的是Select扩展方法。
关于现在AsEnumerable()的使用
AsEnumerable( IEnumerable )方法除了将源代码的编译时类型从实现IEnumerable的类型更改为IEnumerable本身之外,对没有任何影响。
也是
AsEnumerable( IEnumerable )可以用于在序列实现IEnumerable时在查询实现之间进行选择,但也可以使用不同的公共查询方法集。例如,给定实现IEnumerable并具有自己的方法(如Where、SelectMany )的泛型类表,调用Where将调用Table的public方法。表示数据库表的表类型可以有一个Where方法,该方法将谓词参数作为表达式树并将树转换为SQL以进行远程执行。如果不需要远程执行(例如,因为谓词调用了一个本地方法),则可以使用AsEnumerable方法隐藏自定义方法,从而使标准查询运算符可用。
有关进一步的文档,请查看这里。
https://stackoverflow.com/questions/23889631
复制相似问题