C# 返回IQueryable<;T>;如IEnumerable<;T>;将导致在数据库中调用?

C# 返回IQueryable<;T>;如IEnumerable<;T>;将导致在数据库中调用?,c#,.net,entity-framework,ienumerable,iqueryable,C#,.net,Entity Framework,Ienumerable,Iqueryable,我使用实体框架。假设我有一个方法: public IEnumerable<User> GetUsers() // return IEnumerable<User> { using (var context = new AppDbContext()) { return context.Users; } } 此操作是否执行数据库查询?如果不执行任何操作,则不执行,否 但是,如果您尝试对结果进行迭代(或调用Count()等),则它将尝试

我使用实体框架。假设我有一个方法:

public IEnumerable<User> GetUsers() // return IEnumerable<User>
{
    using (var context = new AppDbContext())
    {
        return context.Users;
    }
}

此操作是否执行数据库查询?

如果不执行任何操作,则不执行,否


但是,如果您尝试对结果进行迭代(或调用
Count()
等),则它将尝试进行数据库调用。。。我希望它会失败,因为你在那一点上已经处理了上下文。

如果你不处理它,就不会


但是,如果您尝试对结果进行迭代(或调用
Count()
等),则它将尝试进行数据库调用。。。我希望它会失败,因为你在那一点上已经处理了上下文。

如果你不处理它,就不会


但是,如果您尝试对结果进行迭代(或调用
Count()
等),则它将尝试进行数据库调用。。。我希望它会失败,因为你在那一点上已经处理了上下文。

如果你不处理它,就不会



但是,如果您尝试对结果进行迭代(或调用
Count()
等),则它将尝试进行数据库调用。。。我希望它会失败,因为你已经在那一点上处理了上下文。

不,因为
IQueryable:IEnumerable
@DLeh是的,我已经检查过了,但我有点困惑。也许困惑是因为OP阅读了一些关于
AsEnumerable()
如何触发查询的内容(因为它枚举了集合)?@moarboilerplate什么也做不了。做一个演员很简单。单独使用它不会导致枚举或任何事情
AsEnumerable(IEnumerable)方法除了将源代码的编译时类型从实现IEnumerable的类型更改为IEnumerable本身之外没有任何效果。
@xanatos您的意思是AsEnumerable不会触发数据库查询吗?不,因为
IQueryable:IEnumerable
@DLeh yeah,我已经检查过了,但是我有点困惑。可能是因为OP阅读了一些关于
AsEnumerable()
如何触发查询的内容(因为它枚举了集合)?@moarboilerplate什么都不做。做一个演员很简单。单独使用它不会导致枚举或任何事情
AsEnumerable(IEnumerable)方法除了将源代码的编译时类型从实现IEnumerable的类型更改为IEnumerable本身之外没有任何效果。
@xanatos您的意思是AsEnumerable不会触发数据库查询吗?不,因为
IQueryable:IEnumerable
@DLeh yeah,我已经检查过了,但是我有点困惑。可能是因为OP阅读了一些关于
AsEnumerable()
如何触发查询的内容(因为它枚举了集合)?@moarboilerplate什么都不做。做一个演员很简单。单独使用它不会导致枚举或任何事情
AsEnumerable(IEnumerable)方法除了将源代码的编译时类型从实现IEnumerable的类型更改为IEnumerable本身之外没有任何效果。
@xanatos您的意思是AsEnumerable不会触发数据库查询吗?不,因为
IQueryable:IEnumerable
@DLeh yeah,我已经检查过了,但是我有点困惑。可能是因为OP阅读了一些关于
AsEnumerable()
如何触发查询的内容(因为它枚举了集合)?@moarboilerplate什么都不做。做一个演员很简单。单独使用它不会导致枚举或任何事情
AsEnumerable(IEnumerable)方法除了将源代码的编译时类型从实现IEnumerable的类型更改为IEnumerable本身之外没有任何效果。
@xanatos您的意思是AsEnumerable不会触发数据库查询吗?谢谢Jon!这有帮助@乔恩,如果我看到名单怎么办?我应该发送IEnumerable还是再次迭代后的列表?@bryknaval:不确定“查看列表”是什么意思,或者你的第二个问题是什么意思。您可能应该在新帖子中提问。@JonSkeet我是否可以只将IEnumerable发送到将在Html视图中迭代的视图,而不是发送可能在Html视图中的foreach循环中迭代一次的ToList()和其他内容?@bryknaval:这仍然不清楚,应该仍然在新帖子中。谢谢Jon!这有帮助@乔恩,如果我看到名单怎么办?我应该发送IEnumerable还是再次迭代后的列表?@bryknaval:不确定“查看列表”是什么意思,或者你的第二个问题是什么意思。您可能应该在新帖子中提问。@JonSkeet我是否可以只将IEnumerable发送到将在Html视图中迭代的视图,而不是发送可能在Html视图中的foreach循环中迭代一次的ToList()和其他内容?@bryknaval:这仍然不清楚,应该仍然在新帖子中。谢谢Jon!这有帮助@乔恩,如果我看到名单怎么办?我应该发送IEnumerable还是再次迭代后的列表?@bryknaval:不确定“查看列表”是什么意思,或者你的第二个问题是什么意思。您可能应该在新帖子中提问。@JonSkeet我是否可以只将IEnumerable发送到将在Html视图中迭代的视图,而不是发送可能在Html视图中的foreach循环中迭代一次的ToList()和其他内容?@bryknaval:这仍然不清楚,应该仍然在新帖子中。谢谢Jon!这有帮助@乔恩,如果我看到名单怎么办?我应该发送IEnumerable还是再次迭代后的列表?@bryknaval:不确定“查看列表”是什么意思,或者你的第二个问题是什么意思。您可能应该在一篇新文章中提出一个问题。@JonSkeet我是否可以只将IEnumerable发送到将在Html视图中迭代的视图,而不是发送可能在Html视图中的foreach循环中迭代一次的ToList()和其他内容?@bryknaval:这仍然不清楚,应该仍在一篇新文章中。
var users = GetUsers();