0

LINQ を学び、パラダイムを把握しようとしています...

コア ビジネス オブジェクトの 1 つに LINQ テーブル クラスを設定しました。MS SQL サーバー テーブル オブジェクトを使用して、データベースからこれらのオブジェクトのリストを取得したいと考えています (つまり、関連するすべてのデータベース テーブル/ビューに対して個別の LINQ クラスを定義する代わりに)。私は LINQ の基準/結合構文を使用しても問題ありませんが、ORM コードの塊で怠け者/保守的です。たぶん、私は何か非正統的なことを求めているのかもしれません.LINQ パラダイムでは、LINQ クラスでデータベース構造の 100% レプリカを構築し、それらのクラスのみを使用してクエリを作成することが期待されています。

4

1 に答える 1

1

あなたが説明しているのは、具体的には LINQ to SQL/Entity Framework プロバイダーであり、この動作は実際には LINQ の製品ではありません。データベースの内容をモデル化するために、クラスはまったく必要ありません。たとえば、LINQ to SQL クエリで 3 つのテーブルを結合し、それらを a、b、および c と呼びます。文の最後に select を置いて、次のようにすることができます。

RestOfLinqQuery.Select( new { name = a.name, address = b.address, height = c.height } );

これにより、3 つのテーブルのプロパティで構成される匿名オブジェクトが返されます。また、テーブル a、b、c のさまざまなプロパティを持つオブジェクトを作成し、同じスタイルの初期化を使用するか、設定して作成するすべてのフィールドを受け取るコンストラクターを作成することもできます。テーブルからオブジェクトへのマッピングは Entity Framework によって作成され、LINQ はそれによってまったく制限されません。

編集:この回答には、完全なクエリの良い例があり、私の小さな例よりも優れています。SQL の複数の内部結合を LINQ に変換するにはどうすればよいですか? ご覧のとおり、複数のテーブルから新しく作成されたオブジェクトのプロパティを設定するために、同じタイプの初期化が使用されています。

また、エンタープライズ アプリケーションで作業していて、この問題に遭遇した場合、適切な解決策は、すべての結合を行うビューを db に作成し、行が実際には存在しないテーブルをモデル化するのではなく、C# でビューをモデル化することです。有用なオブジェクトを表します。

于 2013-05-28T21:41:25.127 に答える