2013-10-31 4 views
2

를 인식하지 못합니다 아래 코드 :LINQ 내가 개체 아래에있는 방법 System.Collections.Generic.List

return context.Persons.Select(x => new Model.Person 
         { 
          PersonId = x.PersonId, 
          Name = x.FirstName, 
          LastName = x.LastName, 
          Phones = x.Addresses.Where(a => a.AddressSubTypeId == 1).Select(a => new Model.Phone 
               { 
                PhoneId = a.AddressId, 
                Name = a.CompleteAddress 
               }).ToList(), 
          Emailes = x.Addresses.Where(a => a.AddressSubTypeId == 2).Select(a => new Model.Email 
               { 
                EmailId = a.AddressId, 
                Name = a.CompleteAddress 
               }).ToList() 

         }).ToList(); 

나는 오류 아래에 제기 표현 이상 실행하면 :

LINQ to Entities에서 'System.Collections.Generic.List 1[Model.Phone] ToList[Phone](System.Collections.Generic.IEnumerable 1 [Model.Phone]'메서드를 인식하지 못하고이 메서드를 저장소 식으로 변환 할 수 없습니다.

답변

4

.

먼저 메모리에 사람을 가져 와서 위의 선택을 적용해야합니다. ToList() 또는 AsEnumerable()을 호출하여 사람을 가져올 수 있습니다. 이러한 호출은 쿼리를 구체화하고 목록을 적용 할 수 있습니다.

return context.Persons.ToList().Select(x => new Model.Person 
    { 
     PersonId = x.PersonId, 
     Name = x.FirstName, 
     LastName = x.LastName, 
     Phones = x.Addresses.Where(a => a.AddressSubTypeId == 1).Select(a => new Model.Phone 
      { 
       PhoneId = a.AddressId, 
       Name = a.CompleteAddress 
      }).ToList(), 
     Emailes = x.Addresses.Where(a => a.AddressSubTypeId == 2).Select(a => new Model.Email 
      { 
       EmailId = a.AddressId, 
       Name = a.CompleteAddress 
      }).ToList() 

    }).ToList(); 

명심 ToList()를 호출, 서버의 메모리를 많이 활용 될 수 있습니다 메모리에있는 모든 기록을 얻을 것이다. 귀하의 경우에는 모든 행을 선택하므로 문제가되지 않을 수 있지만 ToList()을 호출하기 전에 Where 절을 추가하고 일반 입력란의 경우 Select을 추가하는 것을 고려해야합니다. 표.

2

식 내부의 메서드를 호출하고, 먼저 참조하는 쿼리를 구체화 한 다음 쿼리에서 구체화 된 목록을 사용할 수 없습니다. 당신이

x.Addresses.Where(a => a.AddressSubTypeId == 1).Select(a => new Model.Phone 
{ 
    PhoneId = a.AddressId, 
    Name = a.CompleteAddress 
}).ToList() 

Emailes = x.Addresses.Where(a => a.AddressSubTypeId == 2).Select(a => new Model.Email 
{ 
    EmailId = a.AddressId, 
    Name = a.CompleteAddress 
}).ToList() 

SQL 문에 번역하려고합니다 작성하고 실패 무엇