2017-11-09 4 views
0

最初にC#コードでゼロと1の関係を持つ多くのサブタイプテーブルを使用する!LINQのすべてのサブタイプを持つ親サブタイプのリストを取得

public class MemberContractRelation 
{ 
    [Key] 
    public long Id { get; set; } 
    public long ContractId { get; set; } 
    public long MemberId { get; set; } 
    public long ListPrice { get; set; } 
    public decimal TaxCountryToPay { get; set; } 
    public decimal TaxProvinceToPay { get; set; } 
    public long InsuredCode { get; set; } 

} 


public class FamilyMemberContractSubtype : MemberContractRelation 
{ 
    public long CalculatedCheckupPrice { get; set; } 

} 

私はこのコードを経由してサブタイプ関連のレコード(左のように参加)と私の親テーブル(MemberContractRelation)のリストを取得したい:

var familyMemberContractSubtype = _rep.FamilyMemberContractSubtype.Where(a => a.Id == ContractId).Select(x => new 
      FamilyMemberInformationsBag 
     { 
      BirthDate = x.Member.BirthDate, 
      FirstName = x.Member.FirstName, 
      LastName = x.Member.LastName, 
      NationalID = x.Member.NationalCode, 
      PhoneNumber = x.Member.IranPhoneNumber, 
      Price = x.ListPrice, 
      ChekUpPrice = x.CalculatedCheckupPrice, 
      TotalPrice = x.ListPrice + x.CalculatedCheckupPrice + x.TaxProvinceToPay + x.TaxCountryToPay, 
      TaxProvinceToPay = x.TaxProvinceToPay, 
      TaxCountryToPay = x.TaxCountryToPay 

     }).ToList(); 

しかし、それはサブを持っているレコードのみを返しますMemberContractRelationで他のレコードを入力しないでください! サブタイプでMemberContractRelationのリストを取得したいのですが、サブタイプで記録されていない場合は、サブタイプでプロパティのNull値を返します。

覚えています私は上記の解決策以外のプロジェクトでは他のソリューションを使用できません。

// instead of _rep.FamilyMemberContractSubtype 
// assuming _rep is DbContext 
_rep.Set<MemberContractRelation>() 

、その後、オペレータas(重要な使用:キャストではないが、これは最初にあなたが親(ベース)テーブルからクエリを開始する必要があり、(それはそうと)EF TPTの継承戦略を使用していると仮定すると、

+0

これはTPT EFの継承パターンのように聞こえる、それが正しいのですか? –

+0

はい、そんなことがありますが、TPTの詳細についてはわかりません – Mohammad

答えて

1

! )を使用して、サブタイプメンバーにアクセスします。あなたのサンプルで:

ChekUpPrice = (long?)(x as FamilyMemberContractSubtype).CalculatedCheckupPrice 

TotalPrice = x.ListPrice + x.TaxProvinceToPay + x.TaxCountryToPay + 
    ((long?)(x as FamilyMemberContractSubtype).CalculatedCheckupPrice ?? 0) 
関連する問題