C# Linq将多个表转换为一个具有嵌套类的继承类

C# Linq将多个表转换为一个具有嵌套类的继承类,c#,linq,nested,entity-framework-6,C#,Linq,Nested,Entity Framework 6,我有一个SQL表,但客户删除了所有外键,不让我用所有外键重建表 我在数据库优先的方法中使用了实体框架,我得到了如下结果: public class MainTable { MainTableID, TableChildOneID, TableChildTwoID, //... many properties } public class TableChildOne { TableChildOneID, //... many properties

我有一个SQL表,但客户删除了所有外键,不让我用所有外键重建表

我在数据库优先的方法中使用了实体框架,我得到了如下结果:

public class MainTable
{
    MainTableID,
    TableChildOneID,
    TableChildTwoID,
    //... many properties
}

public class TableChildOne
{
    TableChildOneID,
    //... many properties
}

public class TableChildTwo
{
    TableChildTwoID,
    //... many properties
}
我创建了一个表示“真实”链接嵌套类的类,如:

public class MainTable_Extended : MainTable
{
    public TableChildOne ChildOne { get; set; }
    public TableChildTwo ChildTwo { get; set; }
}
请注意,MainTable包含许多属性

这里是我要寻找干净语法的查询

IQueryable<MainTable_Extended> listMainTable =
            from main in db.MainTable
            from childone in db.TableChildOne.Where(childone => childone.TableChildOneID == main.TableChildOneID).DefaultIfEmpty()
            from childtwo in db.TableChildTwo.Where(childtwo => childtwo.TableChildTwoID == main.TableChildTwoID).DefaultIfEmpty()
            select new MainTable_Extended
            {
                ChildOne = childone ,
                ChildTwo = childtwo ,
                All others properties coming from => main 
            };
IQueryable listMainTable=
从db.main表中的main
从db.TableChildOne.Where(childone=>childone.TableChildOneID==main.TableChildOneID.DefaultIfEmpty()中的childone
从db.TableChildTwo.Where(childtwo=>childtwo.TableChildTwoID==main.TableChildTwoID.DefaultIfEmpty()中的childtwo
选择新的MainTable\u Extended
{
ChildOne=ChildOne,
ChildTwo=ChildTwo,
来自=>main的所有其他属性
};

我如何填充我的类MainTable\u Extended,而不手动填充所有属性。

也许这对您有用

public class MainTable
   {
       public int MainTableID;
       public int TableChildOneID;
       public int TableChildTwoID;
       //... many properties
   }

public class TableChildOne
   {
       public int TableChildOneID;
       //... many properties
   }

public class TableChildTwo
   {
       public int TableChildTwoID;
       //... many properties
   }

public class MainTable_Extended
   {
       public TableChildOne ChildOne { get; set; }
       public TableChildTwo ChildTwo { get; set; }
       public MainTable Main { get; set; }
   }

public class DB : DbContext
   {
       public DB()
           : base("name=YourName")
       {}

       public virtual DbSet<MainTable> MainTables { get; set; }
       public virtual DbSet<TableChildOne> TableChildOnes { get; set; }
       public virtual DbSet<TableChildTwo> TableChildTwos { get; set; }
   }

public class Test
   {
      public void TestTest()
        {
           var db = new DB();

           IQueryable<MainTable_Extended> listMainTable =
           from main in db.MainTables
           from childone in db.TableChildOnes.Where(childone => childone.TableChildOneID == main.TableChildOneID).DefaultIfEmpty()
           from childtwo in db.TableChildTwos.Where(childtwo => childtwo.TableChildTwoID == main.TableChildTwoID).DefaultIfEmpty()
           select new MainTable_Extended
            {
               ChildOne = childone,
               ChildTwo = childtwo,
               Main = main
            };
        }
    }
公共类主表
{
公共int MainTableID;
公共int表childoneid;
公共int表childtwoid;
//…许多财产
}
公共类表Childone
{
公共int表childoneid;
//…许多财产
}
公共课表二
{
公共int表childtwoid;
//…许多财产
}
公共类MainTable_扩展
{
公共表ChildOne ChildOne{get;set;}
公共表ChildTwo ChildTwo{get;set;}
公共主表Main{get;set;}
}
公共类DB:DbContext
{
公共数据库()
:base(“name=YourName”)
{}
公共虚拟数据库集主表{get;set;}
公共虚拟DbSet tablechildone{get;set;}
公共虚拟数据库集TableChildTwos{get;set;}
}
公开课考试
{
公共void TestTest()
{
var db=新的db();
IQueryable listMainTable=
从db.main表中的main
从db.TableChildOnes.Where(childone=>childone.TableChildOneID==main.TableChildOneID.DefaultIfEmpty()中的childone
从db.TableChildTwos.Where(childtwo=>childtwo.TableChildTwoID==main.TableChildTwoID.DefaultIfEmpty()中的childtwo
选择新的MainTable\u Extended
{
ChildOne=ChildOne,
ChildTwo=ChildTwo,
主要的
};
}
}
我让
MainTable\u扩展类
不在
MainTable类
之内。相反,我使用MainTable对象创建一个属性。因此在查询中,我给
MainTable\u Extended
属性一个值


因此,不,您可以通过调用
MainTable\u Extended

的属性
Main
来查询
MainTable的属性?你需要告诉它,如果你不能通过DB模式做到这一点,那么你必须手动完成。我认为一个连接比三个“from”更好因为我想要一个LEFT-OUTTER连接,而使用连接似乎可以实现内部连接JOIN@HassanN所以你的问题是你想让属性形成MainTable_扩展类?基本上我有三个表没有被EF链接,我想用left outter查询MainTable连接两个子表,并将结果填充到一个类中Hierarchy请解释为什么这会帮助OP,如果你不说出你的想法和你为什么这样做,这对他没有帮助。@JordyvanEijk是的,你是对的。那是我的错,谢谢你的通知!嗨,Darem,它目前的工作方式就像你做的一样,我想问一下,如果有人知道如何使用它inherit@HassanN好的,对不起,我不能help@Darem不用担心,我会等待,如果没有答案,我会接受这个解决办法