Avatar ·

IEnumerable<T> 和 IQueryable<T> 在 C# 中的区别及何时使用?

大家好!我是 C# 新手,正在使用 Entity Framework。我经常搞不清楚什么时候应该返回 IEnumerable,什么时候应该返回 IQueryable。 我在仓库中有一个方法: ```csharp public IEnumerable GetProductsByCategory(int categoryId) { return _context.Products.Where(p => p.CategoryId == categoryId).ToList(); } ``` 但另一位开发者说最好用 IQueryable。我重写了: ```csharp public IQueryable GetProductsByCategory(int categoryId) { return _context.Products.Where(p => p.CategoryId == categoryId); } ``` 现在我的服务调用这个方法并进一步过滤: ```csharp var cheapProducts = repo.GetProductsByCategory(1).Where(p => p.Price < 100).ToList(); ``` 在第一种情况(使用 IEnumerable)中,一切正常但速度慢。在第二种情况(使用 IQueryable)中,速度更快,但我不明白为什么。 请解释一下根本区别是什么?我什么时候应该使用 IEnumerable,什么时候使用 IQueryable?