ホームページ >バックエンド開発 >C++ >LINQ ラムダ式を使用して複数のテーブルを効率的に結合するにはどうすればよいですか?

LINQ ラムダ式を使用して複数のテーブルを効率的に結合するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-10 11:36:42217ブラウズ

How to Efficiently Join Multiple Tables Using LINQ Lambda Expressions?

LINQ ラムダ式を使用して複数テーブルの結合を実行する

はじめに

LINQ では、複数のテーブルを結合して、異なるデータ ソースからのデータを組み合わせることができます。この記事では、LINQ でラムダ式を使用して複数テーブルの結合を実行する方法について説明します。

質問

Product、Category、ProductCategory の 3 つのテーブルを結合しようとしています。連結後、関連するすべてのクラス プロパティを組み合わせた単一のクラスを取得するとします。ただし、作成したコードは期待した結果を生成していないようです。

答え

LINQ ラムダ式で複数の接続をチェーンする場合、中間結果は匿名型として表されます。これは、各結合の結果が、結合されたテーブルのプロパティを組み合わせた新しい匿名型になることを意味します。

関連するすべてのクラス属性を含む単一のクラスを取得するには、最終結果に含める属性を指定する必要があります。これは、Select 演算子を使用して実行できます。

以下は修正されたコードです:

<code>var categorizedProducts = product
    .Join(productcategory, p => p.Id, pc => pc.ProdId, (p, pc) => new { p, pc })
    .Join(category, ppc => ppc.pc.CatId, c => c.Id, (ppc, c) => new { ppc, c })
    .Select(m => new { 
        ProdId = m.ppc.p.Id, // 或 m.ppc.pc.ProdId
        CatId = m.c.CatId
        // 其他赋值
    });</code>

このコードでは、最初に 3 つのテーブル間の結合を実行し、結果を中間の匿名型に保存します。次に、Select 演算子を使用して、最終結果を、必要なプロパティ (ProdId および CatId) を含む新しい匿名型に射影します。

ラムダ式の代わりにクエリ構文を使用すると、コードをさらに簡素化できます。

<code>var categorizedProducts =
    from p in product
    join pc in productcategory on p.Id equals pc.ProdId
    join c in category on pc.CatId equals c.Id
    select new {
        ProdId = p.Id, // 或 pc.ProdId
        CatId = c.CatId
        // 其他赋值
    };</code>

クエリ構文は、特に複数の結合を含む複雑なクエリにおいて、より読みやすく、理解しやすくなりました。

以上がLINQ ラムダ式を使用して複数のテーブルを効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。