首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于AsEnumerable()行为

关于AsEnumerable()行为
EN

Stack Overflow用户
提问于 2014-05-27 12:37:45
回答 1查看 988关注 0票数 2

我有一个ASP.NET MVC应用程序。让我们假设我有这样的观点:

代码语言:javascript
复制
@model IEnumerable<MyClass>
   .....

在服务器端,我使用EF对我的数据库进行了一个linq查询:

代码语言:javascript
复制
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()有用时,有人能解释我吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-27 12:39:19

这是不必要的。您声明的查询将生成一个序列,该序列实现了IEnumerable接口。

正如您将看到的,这里 (实现IEnumerable的类型的Select扩展方法)返回一个IEnumerable

代码语言:javascript
复制
public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector)

您的查询

代码语言:javascript
复制
var query = from t in context.MyClass
            select t;

将被汇编成

代码语言:javascript
复制
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方法隐藏自定义方法,从而使标准查询运算符可用。

有关进一步的文档,请查看这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23889631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档