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

时间:2016-02-29 13:11:45

标签: c# entity-framework linq

我有课程AB,如:

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的所有字段?

1 个答案:

答案 0 :(得分:0)

您的代码描述有点不准确,因此很难找到您真正想要的内容。

从您的示例中,我假设您的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
}