我有一个定义为:
的类public class ElectronicFundTransfer
{
public int Id { get; set;}
public int OrganisationId { get; set; }
}
和两个继承的类:
public class PayPal : ElectronicFundTransfer
{
public BankAccount BankAccount { get; set; }
}
public class PaymentCard : ElectronicFundTransfer
{
public FxRate FxRate { get; set; }
}
请注意,这已经有所简化,还有其他继承的类和其他导航属性。
现在,对于一个组织,我想得到他们所有的ElectronicFundTransfers
。这将返回包含PayPal
和PaymentCard
的列表。我还想分别包含BankAccount
和FxRate
。
如果我将这些以逗号分隔值添加到查询的Include()
方法,则会错误地声称&#34; PaymentCard没有名为“FxRate”的属性。< / p>
我尝试过:
_unitOfWork.ElectronicFundTransferRepository.Queryable()
.Where(o => o.OrganisationId == organisationId)
.Include<PayPal>("BankAccount");
但是我收到了错误
Instance argument: cannot convert from 'System.Linq.IQueryable<ElectronicFundTransfer>' to 'System.Linq.IQueryable<PayPal>'
我可以在一个查询中执行此操作,还是需要为每种类型调用数据库?
由于
答案 0 :(得分:0)
这个答案实现了Gert Arnold的评论:
Context context = new Context();
int orgId = 1;
ElectronicFundTransfer[] paymentcards = context.PaymentCards.Where(pc => pc.OrganisationId == orgId).ToArray();
ElectronicFundTransfer[] paypals = context.PayPals.Where(pp => pp.OrganisationId == orgId).ToArray();
ElectronicFundTransfer[] all = paymentcards.Union(paypals).ToArray();
编辑:实现此目标的另一种方法是使用Table-Per-Hierarchy。在这种情况下,上下文类仅包含以下DbSet:
public DbSet<ElectronicFundTransfer> ElectronicFundTransfers { get; set; }
查询只需要调用一次数据库:
ElectronicFundTransfer[] all = context.ElectronicFundTransfers.Where(ef => ef.OrganisationId == orgId).ToArray();