2016-08-31 3 views
0

データベースからすべての列を取得しない単一のクエリを作成するのに問題があります。 のは、私はスキーマを持っているとしましょう:Entityframeworkネストしたテーブルからの単一選択

table1 { 
    id, 
    column1, 
    column2, 
    column3 
} 

table2 { 
    id, 
    table1ID, 
    column1, 
    column2, 
    column3 
} 
table3 { 
    id, 
    table2ID, 
    column1, 
    column2, 
    column3 
} 
... 
tableN { 
    id, 
    table(N-1)ID, 
    column1, 
    column2, 
    column3 
} 

私はtable2..tableN構造からtable1.column1と、すべてのデータを選択するためにLINQクエリを作成したいと思います。

すべてのフィールドをtable2..tableNから作成したいので、対応するフィールドを持つDTOを作成してAutoMapperを使用できます(実際には問題はありませんが、オンラインで落胆したことがあります)。私が知っている

ソリューション:

  • 私は単純context.table1.include(table2).include(table3)..include(tableN).ToList()ですべてのデータを取得し、その後、table2..tableNためAutoMapperを使用して、手動table1のために私がしたいフィールドを取るが、生成されたクエリはすべてtable1のフィールドを取ることができます。 LINQの中

  • AutoMapperは、この1つは

    context.table1.select(x => new table1DTO { 
        field1 = x.field1, 
        table2 = x.table2.select(y => new table2DTO { 
         field1 = y.field1, 
         .. 
         table3 = y.table3.select(z => new table3DTO { 
          field1 = z.field1, 
          .. 
          table4 = .. 
    )}; 
    

    に動作しますが、私は本当に入れ子構造を持っている場合、書き込みが痛いです

    context.table1.select(new table1DTO {x => 
        field1 = x.field1, 
        table2 = AutoMapper<table2, table2DTO>(x.table2) 
    }; 
    

    動作しません。 Linqコードを生成するスクリプトを書くことができました。

  • 書き込み二つの異なる選択、table2..tableN

ためtable1用と他のあなたが任意のより良い解決策は知っていますか?

+1

AutoMapperには、ProjectToメソッドがあります。これは、使用する必要があります。 –

答えて

1

あなたのデータベース構造。すべてのフィールド(すべてのテーブルのすべての列)が必要な正面図を作成し、LINQクエリを使用する必要があります。

+0

*そしてLINQクエリを使用してください*うーん、それはポイントです。どうやって?私にとって、あなたの答えはコメントではありません。 –

+0

私は「正面図」によって何を意味するのか分かりません – ilovegame

+0

すべての表のすべての列を持つデータベースにView表を作成できます。このView TableでLinqを使用します。 –

関連する問題