2017-11-09 14 views
0

먼저 C# 코드에서 0 번째 관계가있는 많은 하위 유형 테이블 사용!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 값을 반환합니다.

기억 나는 위의 솔루션을 제외하고는 내 프로젝트에서 다른 솔루션을 사용할 수 없다는 것을 기억하십시오! 하지 캐스트 : 운영자 as (중요한을 사용하여 다음

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

과 :

+0

이 TPT EF 상속 패턴처럼 들린다는 것이 맞습니까? –

+0

예, 그렇습니다.하지만 TPT 세부 정보는 정확히 모릅니다. – Mohammad

답변

1

먼저 부모 (기본) 테이블에서 쿼리를 시작해야한다, (이 보인다)이 EF TPT 상속 전략을 사용하고 가정!)을 사용하여 하위 유형 구성원에 액세스하여 Null 허용 유형을 Null 허용으로 승격합니다. 샘플에서 :

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

TotalPrice = x.ListPrice + x.TaxProvinceToPay + x.TaxCountryToPay + 
    ((long?)(x as FamilyMemberContractSubtype).CalculatedCheckupPrice ?? 0)