我有一个问题,即制作一个不从数据库中获取所有列的查询。 假设我有架构:
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
}
我想创建一个linq查询来选择table1.column1
以及来自table2..tableN
结构的所有数据。
由于我想要table2..tableN
的所有字段,我可以使用相应的字段创建DTO并使用AutoMapper(我真的没有看到它的问题,但我在网上看到了一些沮丧)。
我知道的解决方案:
我可以简单地使用context.table1.include(table2).include(table3)..include(tableN).ToList()
获取所有数据,然后使用AutoMapper作为table2..tableN
并手动获取我想要的table1
字段,但生成的查询将获取所有table1
1}}字段。
Linq中的AutoMapper不起作用
context.table1.select(new table1DTO {x =>
field1 = x.field1,
table2 = AutoMapper<table2, table2DTO>(x.table2)
};
这个有效
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 = ..
)};
但如果我有真正的嵌套结构,那么写起来很痛苦。我可以编写生成Linq代码的脚本。
table1
,另一个用于table2..tableN
你知道更好的解决方案吗?
答案 0 :(得分:1)
使用您的数据库结构。你应该创建一个包含你想要的所有字段(所有表的所有列)的前视图,然后使用LINQ查询。