2016-06-02 7 views
0

私のように定義されたクラスがあります。Entity Frameworkの中で継承されたすべてのエンティティおよびナビゲーションプロパティを取得

public class ElectronicFundTransfer 
{ 
    public int Id { get; set;} 
    public int OrganisationId { get; set; } 
} 

と2つの継承したクラス:これはやや単純化されたことを

public class PayPal : ElectronicFundTransfer 
{ 
    public BankAccount BankAccount { get; set; } 
} 

public class PaymentCard : ElectronicFundTransfer 
{ 
    public FxRate FxRate { get; set; } 
} 

は注意を、追加があります継承するクラスと追加のナビゲーションプロパティ。

今、組織のために、私はすべて彼らのElectronicFundTransfersを取得したいと思います。これにより、PayPalPaymentCardの両方を含むリストが返されます。また、それぞれBankAccountFxRateを含めることもできます。

私はPaymentCardは 『FxRate』と呼ばれる性質を持っていない」と主張したクエリのそれエラーのInclude()メソッドに値をカンマ区切りとしてこれらを追加する場合

私がやってみました:。

_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>'

これを1つのクエリで行うことはできますか、それぞれのタイプについてDBを呼び出す必要がありますか?

おかげ

+1

をはい、あなたはそれぞれのタイプのクエリ、または連合を必要としています。 –

答えて

0

この答えはゲルト・アーノルドさんのコメントが実装されています

 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(); 

編集:これを実装する別の方法は、表ごとの階層です。この場合、コンテキストクラスのみ、以下のDbSetが含まれています

public DbSet<ElectronicFundTransfer> ElectronicFundTransfers { get; set; } 

クエリは、データベースへの1つの呼び出しが必要です。

ElectronicFundTransfer[] all = context.ElectronicFundTransfers.Where(ef => ef.OrganisationId == orgId).ToArray(); 
+0

@ADringer:これを動作させることができましたか? – bwyn

+0

私は '連合 'の使用についてはあまりよく分からないので、私はまだDBへの旅行を3回行いますが、結果を1つの配列にグループ化しますか? – ADringer

+0

元の回答では、DBへの2回の旅行があります(支払いカードとペイパルでそれぞれ1回)。結果の配列に対して共用化が実行されます。支払カードとペイパルを配列にキャスティングすることは不要なステップですが、コードを読みやすくします。支払いカードとペイパルの両方が同じテーブル(弁別欄)に保存されていれば、編集が望ましいかもしれません。 – bwyn

関連する問題