为了账号安全,请及时绑定邮箱和手机立即绑定

Linq 从许多表生成一个带有嵌套类的继承类

Linq 从许多表生成一个带有嵌套类的继承类

C#
长风秋雁 2021-07-06 13:01:41
我有一个 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             };如何填充我的类 MainTable_Extended 而无需为所有属性手动填充。
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

也许这对你有用?


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

            };

        }

    }

我让MainTable_Extended classnot inhier 从MainTable class. 相反,我使用 MainTable 对象创建了一个属性。所以在查询中我给出MainTable_Extended了属性的值。


因此,没有可以查询的propertysMainTable通过调用属性Main的MainTable_Extended。


查看完整回答
反对 回复 2021-07-10
  • 1 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信