データベースからすべての列を取得しない単一のクエリを作成するのに問題があります。 のは、私はスキーマを持っているとしましょう: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
用と他のあなたが任意のより良い解決策は知っていますか?
AutoMapperには、ProjectToメソッドがあります。これは、使用する必要があります。 –