LINQ をマスターする: グループ化を使用した左結合の正確な子レコード数
SQL クエリを LINQ to SQL に変換することは、特に左結合、グループ化、正確なレコードカウントなどの複雑なシナリオを扱う場合には難しい場合があります。 この例では、グループ化を使用した左結合で子レコードを正しくカウントし、よくある落とし穴に対処する方法を示します。
次の SQL クエリについて考えてみましょう:
<code class="language-sql">SELECT p.ParentId, COUNT(c.ChildId) FROM ParentTable p LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId GROUP BY p.ParentId</code>
単純な LINQ 変換では、null 値の処理に関する重要な詳細を見落とす可能性があります。
<code class="language-csharp">from p in context.ParentTable join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1 from j2 in j1.DefaultIfEmpty() group j2 by p.ParentId into grouped select new { ParentId = grouped.Key, Count = grouped.Count() }</code>
このアプローチでは、null 値が誤ってカウントされます。 解決策は、Count()
メソッドを変更して null の ChildId
値を除外することです。
<code class="language-csharp">from p in context.ParentTable join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1 from j2 in j1.DefaultIfEmpty() group j2 by p.ParentId into grouped select new { ParentId = grouped.Key, Count = grouped.Count(t => t.ChildId != null) }</code>
この洗練された LINQ クエリは、null 以外の ChildId
値のみを正確にカウントし、各親の正しい子レコード数を提供します。 LINQ to SQL で左結合および集計関数を使用する場合は、データの整合性を確保するために常に null を考慮することを忘れないでください。
以上がグループ化を使用した LINQ 左結合で子レコードを正確にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。