0

다음은 간단한 예제의 문제점입니다.엔티티에 LINQ에서 사용할 수없는 엔티티의 속성

나는 두 기관은 SQL Server 데이터베이스에서 모델링 한 :

  1. 주문 (열을 사용할 수 = OrderID를, PackageCount, ManufactureDate, ShipDate, StatusID) 기본 키 = OrderID를) RecipientID = 사용할 수
  2. OrderRecipients (열, 주소, 도시, 우편 번호, 국가, 주문 ID, 외래 키 = 주문 ID)

Order와 OrderRecipients 사이에 [1 대 다수] 관계가 있습니다. 하나의 주문에는 여러 명의 수신자가있을 수 있습니다.

다음 코드를 통해 주문받는 사람을 추출하려고합니다.

var allmyrecipients = from o in mycontext.Orders 
         where (o.SiteID.Equals("NYC") || o.SiteID.Equals("SFO")) 
         select o.OrderRecipients; 

그러나 나는 다음과 같은 코드를 사용하여받는 사람의 이름을 가져하려고하면

foreach (var recipient in allmyrecipients) 
{ 
    Console.WriteLine(recipient.FirstName); 
} 

firstName을 수신자의 다른 속성은 인텔리 드롭 다운에서 사용할 수 없습니다. 나는 "FirstName의 정의를 포함하고 있지 않다"라는 오류가 발생합니다.

왜 이것이 무엇이며 어떻게 해결됩니까? 여기서 내가 뭘 잘못하고 있니? VS 2010, Entity Framework 4로 작업하고 있습니다.

도움을 주셔서 감사합니다.

+0

갱신 1 :이에게 주사를'foreach는 (allmyrecipients에 var에받는 사람) {foreach는 (받는 사람의 var에 r)을 {Console.WriteLine (R .이름); }}'왜 이래? – FMFF

답변

1

편집 : 나는 이것을 SelectMany을 사용하여 작동해야하는 것으로 리팩터링했습니다. 나는 코드의이 비트를 시도하고 오류가 발생하지 않습니다 :

var orders = from o in mycontext.Orders 
    where (o.SiteID.Equals("NYC") || o.SiteID.Equals("SFO")) 
    select o; 

foreach (var recipient in orders.SelectMany(r => r.OrderRecipients)) 
{ 
    Console.WriteLine(recipient.FirstName); 
} 
+0

그 다음과 같은 오류가 발생합니다 :'암시 적으로 'System.Linq.IQueryable >'형식을 'System.Linq.IQueryable '형식으로 변환 할 수 없습니다. '. 명시 적 변환이 존재합니다 (캐스트가 누락 되었습니까?) ' – FMFF

+0

수정 및 리팩토링되었습니다. SelectMany가 올바르게 투영을 처리해야한다고 생각합니다. –

+0

귀하의 답변은 올바른 방향으로 나에게 지적했습니다. LINQ 쿼리는 많은 수의받는 사람이있는 많은 수의 명령을 실제로 반환합니다. 그것이 전환 오류를 던진 이유입니다. 고맙습니다. – FMFF

관련 문제