Linq 选择继承类的所有字段和派生类的某些字段

本文关键字:字段 派生 选择 继承 Linq | 更新日期: 2023-09-27 18:36:39

我有A类,B如下:

class A
{
     public int a;
     public int b;
     public int c;
     public int d;
     public int e;
     public int f;
}
class B: A{
     public int g;
}

现在我想选择 从 A 类型的表中,我应该写下所有字段,例如:

B[] b;
using(DBContext db = new DBContext(){
      b = db.A.Select(x=> new B{
      a = a,
      b = b,
      c = c,
      d = d,
      f = f,
      e = e,
      g = somevalue,      
});
}

或者有没有办法说选择类A的所有字段+字段g

Linq 选择继承类的所有字段和派生类的某些字段

你的代码描述有点不准确,因此很难找出你真正想要的东西。

从您的示例中,我假设您的 DbContext 具有类型 A 的 DbSet:

public class MyDbcontext : DbContext
{
    public DbSet<A> A {get; set;}
    ...
}

并且您希望使用可以从DbContext和someValue中的实体获得的A数据构造一个B。

您如何从 DbContext 中检索 A 数据的示例不起作用,我无法理解您想要如何搜索:通过 Id? 通过 A 中的一个字段检索?。为了克服这一点。假设您有一个过程可以从 A 实体表中的正确行中获取数据:

public A GetTheAThatIWant(...);
public int GetMyG(...);

现在构造 B 的巧妙方法是通过一个特殊的构造函数

public B(A, int g)
{
    // fairly straightforward code
}

public B(parametersToFetchA, parametersToFecthG)
{
     A a = GetTheAThatIWant(parametersToFetchA);
     int g = GetMyG(parametersToFetchG);
     // rest is fairly straightforward
}