動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
C#

定石3: IEnumerable<T> —遅延評価・LINQの基本型

出典: C# のコレクション選び — 配列 / List / IEnumerable / IList の使い分け完全ガイド定石3: IEnumerable<T> —遅延評価・LINQの基本型

定石3: IEnumerable<T> —遅延評価・LINQの基本型 (csharp)#492870f19ead
// ✅定石3: IEnumerable<T>と遅延評価
public IEnumerable<CustomerVm> GetActiveCustomers()
{
    return _db.Customers
        .Where(c => c.Status == "active")
        .Select(c => new CustomerVm { Id = c.Id, Name = c.Name });
    // ↑この時点ではSQLはまだ発行されない(遅延評価)
}
 
//呼び出し側
var customers = GetActiveCustomers();
 
// 1回目のforeachで初めてSQL発行
foreach (var c in customers)
{
    Console.WriteLine(c.Name);
}
 
// ⚠️ 2回目のforeachで同じSQLがもう一度発行される!
foreach (var c in customers)// ← 2回目のSQL発行
{
    Logger.Info(c.Name);
}
 
// ✅対策: ToList()で具体化して持ち回す
var customerList = GetActiveCustomers().ToList();   //この時点でSQL 1回
foreach (var c in customerList){ /* 1回目 */ }
foreach (var c in customerList){ /* 2回目(SQL再発行なし)*/ }
▸ 実行ボタンで結果を表示
  • id: #492870f19ead
  • lines: 28
  • extracted: 2026-06-10
  • captured: 2026-06-10

Source収録記事

この snippet は記事の「定石3: IEnumerable<T> —遅延評価・LINQの基本型」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

4
図鑑トップ