EF에서 Linq에 대한 도움이 필요합니다. 세 가지 종류 (Kind1, Kind2, Kind3)의 열거 형인 Type EKind의 "CustomerKind"열이있는 고객 테이블이 있습니다.EF Linq의 스위치
"Kind1Details", "Kind2Details"및 "Kind3Details"와 같은 추가 테이블도 있습니다. 이 세부 정보 테이블에는 모두 특수 Name (열 이름)이 있습니다.
이제는 EF Linq 문을 사용하여 정보를 얻고 싶습니다. CustomerKind가 Kind1이면 Kind2Details의 Kind2이고 Kind3Details의 Kind3 인 경우 테이블 Kind1Details의 이름을 원합니다. 그래서 실제로 select new 절에서 스위치가 필요합니다. like :
var customerList=from customer in context.Customer
select new
{
Id=customer.Id,
Kind=customer.CustomerKind,
if(Kind==EKind.Kind1)
Name=customer.Kind1.Name
if (Kind == EKind.Kind2)
Name = customer.Kind2.Name
if (Kind == EKind.Kind3)
Name = customer.Kind3.Name
}
나는 모든 데이터를로드하고 쿼리를 통해 다시 처리 할 수 있지만 더 좋은 방법이있을 수 있습니다.
마침내 얻었습니다. 감사합니다. 여기 내 작업 솔루션입니다 :
var customerList = from customer in context.Customer
select new
{
Id = customer.Id,
Kind = customer.CustomerKind,
Name1 = (Kind == EKind.Kind1) ? customer.Kind1.Name : null,
Name2 = (Kind == EKind.Kind2) ? customer.Kind2.Name : null,
Name3 = (Kind == EKind.Kind3) ? customer.Kind3.Name : null,
Age1 = (Kind == EKind.Kind1) ? customer.Kind1.Age : 0,
Age2 = (Kind == EKind.Kind2) ? customer.Kind2.Age : 0,
Age3 = (Kind == EKind.Kind3) ? customer.Kind3.Age : 0,
};
return customerList.Select(r => new CustomerOV
{
Age = r.Age1 + r.Age2 + r.Age3,
Name = r.Name1 ?? r.Name2 ?? r.Name3,
}).ToList();
니코 다른 대답에 코멘트를 만들려고
당신이 찾고있는 단어는 [차별] (이라고 생각 http://stackoverflow.com/questions/24333297/엔티티 프레임 워크 - 케이스 - 온 - discriminator) – CodingYoshi
[? : 조건부 연산자] (https://msdn.microsoft.com/en-us/library/ty67wk28.aspx) –
질문에 대답을 수정하지 마십시오. 귀하의 솔루션이 제공된 답변 중 하나와 크게 다른 경우, 귀하가 직접 답변을 제출하고 동의하십시오. 그러나 제공된 답변 중 하나가 유효하면 그 사실을 수락하십시오. 어쨌든 질문에 대답하지 마십시오. – krillgar