.IEnumerable和IQueryable两接口的区别
2023-12-18 15:01 钟铧若岩 阅读(118) 评论(0) 收藏 举报
1)所有对于IEnumerable的过滤、排序、分组、聚合等操作,都是在内存中进行的。也就是说把所有
的数据不管用不用得到,都从数据库倒入内存中,只是在内存中进行过滤和排序操作,但性能很高,空
间换时间,用于操作本地数据源。
(2)所有对于IQueryable的过滤、排序、分组、聚合等操作,只有在数据真正用到的时候才会到数据
库中查询,以及只把需要的数据筛选到内存中。Linq to SQL引擎会把表达式树转化成相应的SQL在数据
库中执行,这也是Linq的延迟加载核心思想所在,在很复杂的操作下可能比较慢了,时间换空间。
(3)操作本地数据源用IEnumerable,操作远程数据源用IQueryable
1. 命名空间与继承关系
2. 执行方式
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// 使用 IEnumerable 进行查询
var result = numbers.Where(n => n > 3);
foreach (var num in result)
{
Console.WriteLine(num);
}
}
}
using System;
using System.Data.Entity;
using System.Linq;
// 假设这是一个实体类
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
// 假设这是一个数据库上下文类
public class ProductContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
class Program
{
static void Main()
{
using (var context = new ProductContext())
{
// 使用 IQueryable 进行查询
var query = context.Products.Where(p => p.Name.Contains("Apple"));
foreach (var product in query)
{
Console.WriteLine(product.Name);
}
}
}
}
3. 延迟执行
4. 性能差异
5. 扩展方法的使用
浙公网安备 33010602011771号