Entityframework从嵌套表中单选

时间:2016-08-31 09:35:22

标签: c# entity-framework

我有一个问题,即制作一个不从数据库中获取所有列的查询。 假设我有架构:

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

你知道更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

使用您的数据库结构。你应该创建一个包含你想要的所有字段(所有表的所有列)的前视图,然后使用LINQ查询。