找回密码
 立即注册
首页 业界区 业界 .NET开发中3秒判断该用 IEnumerable 还是 IQueryable ...

.NET开发中3秒判断该用 IEnumerable 还是 IQueryable

靳谷雪 7 天前
在.NET开发中,IEnumerable和IQueryable是处理数据集合时最常用的两个接口。很多开发者对它们的选择感到困惑,但其实只需要掌握几个关键点就能快速做出正确决策。
核心区别:执行位置

IEnumerable:在内存中执行查询操作
IQueryable:在数据源端执行查询操作
选择 IEnumerable 当:

1、数据已在内存中
  1. // 数据来自内存集合
  2. List<User> users = GetUsersFromMemory();
  3. var result = users.Where(u => u.Age > 18); // 使用 IEnumerable
复制代码
2、需要立即执行查询
  1. var users = dbContext.Users.ToList() // 立即执行
  2.                    .Where(u => u.Age > 18); // 在内存中过滤
复制代码
3、使用LINQ to Objects功能
  1. // 使用.NET方法而非SQL可翻译的方法
  2. var result = users.Where(u => u.Name.Contains("John"))
  3.                   .AsEnumerable() // 切换到内存操作
  4.                   .Select(u => new { u.Name, Initial = u.Name[0] });
复制代码
选择 IQueryable 当:

1、需要数据库端过滤
  1. // 查询被转换为SQL并在数据库执行
  2. var result = dbContext.Users
  3.                      .Where(u => u.Age > 18) // 生成 SQL: WHERE Age > 18
  4.                      .OrderBy(u => u.Name);
复制代码
2、需要分页或聚合操作
  1. // 只在数据库获取需要的记录
  2. var pagedResult = dbContext.Users
  3.                           .Where(u => u.IsActive)
  4.                           .Skip(20).Take(10) // 生成分页SQL
  5.                           .ToList();
复制代码
3、构建动态查询
  1. IQueryable<User> query = dbContext.Users;
  2. if (!string.IsNullOrEmpty(searchName))
  3.     query = query.Where(u => u.Name.Contains(searchName));
  4. if (minAge.HasValue)
  5.     query = query.Where(u => u.Age >= minAge.Value);
  6. var finalResult = query.ToList(); // 单一SQL查询
复制代码
性能提示
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册