.NET開發中3秒判斷該用 IEnumerable 還是 IQueryable
在.NET開發中,IEnumerable和IQueryable是處理數據集合時最常用的兩個接口。很多開發者對它們的選擇感到困惑,但其實只需要掌握幾個關鍵點就能快速做出正確決策。
核心區別:執行位置
IEnumerable:在內存中執行查詢操作
IQueryable:在數據源端執行查詢操作
選擇 IEnumerable 當:
1、數據已在內存中
// 數據來自內存集合 List<User> users = GetUsersFromMemory(); var result = users.Where(u => u.Age > 18); // 使用 IEnumerable
2、需要立即執行查詢
var users = dbContext.Users.ToList() // 立即執行 .Where(u => u.Age > 18); // 在內存中過濾
3、使用LINQ to Objects功能
// 使用.NET方法而非SQL可翻譯的方法 var result = users.Where(u => u.Name.Contains("John")) .AsEnumerable() // 切換到內存操作 .Select(u => new { u.Name, Initial = u.Name[0] });
選擇 IQueryable 當:
1、需要數據庫端過濾
// 查詢被轉換為SQL并在數據庫執行 var result = dbContext.Users .Where(u => u.Age > 18) // 生成 SQL: WHERE Age > 18 .OrderBy(u => u.Name);
2、需要分頁或聚合操作
// 只在數據庫獲取需要的記錄 var pagedResult = dbContext.Users .Where(u => u.IsActive) .Skip(20).Take(10) // 生成分頁SQL .ToList();
3、構建動態查詢
IQueryable<User> query = dbContext.Users; if (!string.IsNullOrEmpty(searchName)) query = query.Where(u => u.Name.Contains(searchName)); if (minAge.HasValue) query = query.Where(u => u.Age >= minAge.Value); var finalResult = query.ToList(); // 單一SQL查詢
性能提示??
錯誤用法:?// 這將加載整個表到內存! var users = dbContext.Users.ToList() .Where(u => u.Age > 18);
// 只在數據庫查詢需要的記錄 var users = dbContext.Users .Where(u => u.Age > 18) .ToList();

浙公網安備 33010602011771號