gpt4 book ai didi

c# - Linq 将许多表的结果转换为具有嵌套类的继承类

转载 作者:行者123 更新时间:2023-11-30 17:29:57 25 4
gpt4 key购买 nike

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

我在数据库优先方法上使用了 Entity Framework ,我有类似的东西:

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 而无需为所有属性手动填充。

最佳答案

也许这对你有用?

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 类 不继承于 MainTable 类。相反,我使用 MainTable 对象创建了一个属性。所以在查询中我给 MainTable_Extended 一个属性值。

因此,您不能通过调用 MainTable_Extended 的属性 Main 来查询 MainTable 的属性。

关于c# - Linq 将许多表的结果转换为具有嵌套类的继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com