ホームページ > バックエンド開発 > C++ > グループ化を使用した LINQ 左結合で子レコードを正確にカウントするにはどうすればよいですか?

グループ化を使用した LINQ 左結合で子レコードを正確にカウントするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-08 20:31:55
オリジナル
333 人が閲覧しました

How to Accurately Count Child Records in a LINQ Left Join with Grouping?

LINQ をマスターする: グループ化を使用した左結合の正確な子レコード数

SQL クエリを LINQ to SQL に変換することは、特に左結合、グループ化、正確なレコードカウントなどの複雑なシナリオを扱う場合には難しい場合があります。 この例では、グループ化を使用した左結合で子レコードを正しくカウントし、よくある落とし穴に対処する方法を示します。

次の SQL クエリについて考えてみましょう:

SELECT p.ParentId, COUNT(c.ChildId)
FROM ParentTable p
LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId
GROUP BY p.ParentId
ログイン後にコピー

単純な LINQ 変換では、null 値の処理に関する重要な詳細を見落とす可能性があります。

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() }
ログイン後にコピー

このアプローチでは、null 値が誤ってカウントされます。 解決策は、Count() メソッドを変更して null の ChildId 値を除外することです。

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) }
ログイン後にコピー

この洗練された LINQ クエリは、null 以外の ChildId 値のみを正確にカウントし、各親の正しい子レコード数を提供します。 LINQ to SQL で左結合および集計関数を使用する場合は、データの整合性を確保するために常に null を考慮することを忘れないでください。

以上がグループ化を使用した LINQ 左結合で子レコードを正確にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート