2010-01-12 1 views
2

내 응용 프로그램의 데이터 계층에있는 LINQ to Entities를 사용하고 있지만 results.ToList()를 호출 할 때 NotSupportedException에 의해 망치질 중입니다.ASP.NET Entity Framework NotSupportedException

public List<Organization> GetByLocation(Location l) 
    { 
     using (Entities entities = new Entities()) 
     { 
      var results = from o in entities.OrganizationSet 
          where o.Location == l 
          select o; 

      return results.ToList<Organization>(); 
     } 
    } 

요점은 JSON 다음 수익률로 변환 MVC 컨트롤러에 반환하는 서비스 계층에 주어진 위치 (에서 모든 조직의 목록을 반환하는 것입니다 : 여기에 예외를 발생하는 기능입니다 클라이언트에게). 서비스 계층 (Service Layer)은 List가 반환 될 것으로 기대하고 있습니다.

이것은 매우 간단 할 수 있습니다 ... 어떤 도움이 필요합니까?

답변

8
public List<Organization> GetByLocation(Location l) 
{ 
    using (Entities entities = new Entities()) 
    { 
     var results = from o in entities.OrganizationSet 
         where o.Location.Id == l.Id 
         select o; 

     return results.ToList<Organization>(); 
    } 
} 

이 쿼리는 SQL로 변환되므로 참조 비교를 수행 할 수 없습니다. l. 대신 PK로 비교하십시오.

+0

Sheesh, 저는 C#에서 작업 할 때 최대 절전 모드 쿼리에서 Java로 수백만 번을 수행합니다. (그리고 누군가가 묻는다면, 잠시 동안 NHibernate가 다소 잘 설계되어있는 동안이 앱을 가볍게 유지하려고하지 않을 것입니다.) – Jason

+0

그건 그렇고 - 참조 비교를 기본 키 비교로 자동으로 돌리지 않는 좋은 이유가 있습니까? 이는 특히 복합 키의 경우 쿼리를 단축합니다. –

+0

Daniel, 가능한 일인 것처럼 보이지만 그 결과를 생각하지 않았습니다. 우선,'=='은 오버로드 될 수있다. –