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

動くコード図鑑

$ ls -1 /library | wc -l → 619

触って動く、検証済みの正解集。

公開記事から抽出した全コードブロックを 1 つずつページ化。 ▶ ボタンで 実行ログを再生し、 さも今動いてるかのように出力を流す。

この図鑑の使い方

言語で絞る

C# / SQL / TypeScript / PowerShell / Bash でフィルタ。

▶ で実行

事前収録の出力を 1 行ずつ再生。 ぱっと結果が見える。

記事と接続

各 snippet は出典記事へのリンク付き。 文脈ごと読める。

絞り込み

snippet 一覧

97
C#
// EF6 (.NET Fx 4.7.2)・これが本番で爆発するやつ
using var db = new MyDbContext();
var customers = db.Customers.ToList();   // SQL #1: SELECT * FROM Customers
foreach (var c in customers) {
    var count = c.Orders.Count();        // ループのたびに SQL 追加発行
▶ 実行可

パターン1: 罠 (Include 忘れ + foreach 内 navigation)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#0cd0b26748ea
C#
// EF6 (.NET Fx 4.7.2)・Include で関連を1クエリにまとめる
using var db = new MyDbContext();
var customers = db.Customers
    .Include(c => c.Orders)             // JOIN Orders を含める
    .ToList();                           // SQL #1: SELECT ... FROM Customers c LEFT JOIN Orders o ...
▶ 実行可

パターン2: Include で eager loading (1クエリで関連ごと取得)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#8a5aff026173
C#
Console.WriteLine("[SQL #1] SELECT c.*, o.* FROM Customers c LEFT JOIN Orders o ON c.Id = o.CustomerId");
var customersWithOrders = customers
    .GroupJoin(orders,
        c => c.Id,
        o => o.CustomerId,
▶ 実行可

パターン2: Include で eager loading (1クエリで関連ごと取得)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#a218fe1f714f
C#
// EF6 (.NET Fx 4.7.2)・Select で必要な列だけ射影
using var db = new MyDbContext();
var summary = db.Customers
    .Select(c => new {
        c.Name,
▶ 実行可

パターン3: Select 射影で1クエリ集計 (画面に出す列だけ)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#ea190218fcb0
C#
Console.WriteLine("[SQL #1] SELECT c.Name, (SELECT COUNT(*) FROM Orders o WHERE o.CustomerId = c.Id) AS OrderCount, (SELECT ISNULL(SUM(o.Amount),0) FROM Orders o WHERE o.CustomerId = c.Id) AS TotalAmount FROM Customers c");
var summary = customers
    .Select(c => new {
        c.Name,
        OrderCount = orders.Count(o => o.CustomerId == c.Id),
▶ 実行可

パターン3: Select 射影で1クエリ集計 (画面に出す列だけ)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#9ac91d59371f
C#
// これが地雷
IQueryable<Order> recentOrders = db.Orders.Where(o => o.OrderDate > DateTime.Now.AddDays(-7));

var count = recentOrders.Count();          // SQL #1: SELECT COUNT(*) ...
var first = recentOrders.FirstOrDefault(); // SQL #2: SELECT TOP(1) ...
▶ 実行可

ハマりポイント: LINQ 遅延実行と「複数列挙」の罠

EF6 + LINQ で N+1 問題を踏まない3つの書き方#a1cd6d0618df
C#
namespace Linq
{
    internal class Program
    {
        public static void Main(string[] args)
▶ 実行可

FizzBuzz1行のコード

FizzBuzz問題が1行で書けたのでその解説#93309a6c8c59