2011-08-13 3 views
0

LOCAL to ENTITY를 사용하는 POCO에서 동일한 POCO의 HashSet 속성에서 첫 번째 개체를 가져 오는 속성을 사용하려고합니다.poco의 하위 쿼리를 사용하여 속성 채우기

public virtual HashSet<ScheduleWaypoint> ScheduleWaypoints { get; set; } 

public ScheduleWaypoint ArrivalStation { 
     get { 
      if (this.ScheduleWaypoints != null && this.ScheduleWaypoints.Count() > 0) { 
       return this.ScheduleWaypoints.Where(row => row.WaypointType.Type.Trim() == "SA").OrderByDescending(row => row.ScheduledTime).First(); 
      } else 
       return null; 
     } 
    } 

것은 내가이 일 것이다 그러나 나는 그것이 다른 LINQ 쿼리 내에서 작동하지 않는 것을 알고 있다면 내가 확실히 말할 수 없다 하나의 개체로 작업하는 경우 : 내 객체는 다음을 포함합니다. 개체를 만들 때 ScheduleWaypoint의 ID에 액세스 할 수 없습니다. 채워진 후에 만 ​​가능할 수 있습니다. 이 일을 할 수있는 방법이 있습니까? 지금은 나에게 말하고있다 :

지정된 유형의 멤버 'ArivalStation'은 LINQ에서 엔티티로 지원되지 않습니다. 이니셜 라이저, 엔터티 멤버 및 엔터티 탐색 속성 만 지원됩니다.

내가 정보를 필요로 할 때 끊임없이 조인을하는 것이 아니라이 정보에 대한 액세스 권한을 얻기 위해 할 수있는 일이 있습니까?

감사합니다.

답변

0

linq-to-entities 쿼리에서 사용자 지정 속성을 사용할 수 없습니다. 데이터베이스에 직접 매핑 된 속성 만 사용할 수 있습니다. = ArrivalStation을 반환하는 linq-to-entities 쿼리에 직접 하위 쿼리가 있어야합니다. 아마도 그것이 단순 확장 방법으로 포장 할 수 있습니다 Route이 방법 포인트가 정의 교장 실체가

public static IQueryable<ScheduleWaypoint> GetArrivalStation(this IQueryable<ScheduleWaypoints> waypoints, int routeId) 
{ 
    return waypoints.Where(w => w.WaypointType.Type.Trim() == "SA" && w.Route.Id == routeId) 
        .OrderByDescending(w => w.ScheduledTime) 
        .FirstOrDefault(); 
} 

. 하위 쿼리는 First을 사용할 수 없으므로 FirstOrDefault이 사용됩니다.

+0

나는 약간의 제약을 받고 있지만 그것이 무엇인지 알지 못한다고 생각했다. 그 해결책이 나에게 효과가 있을지 모르겠다. 내가 IQueryable을 반환하면 ArrivalStation에서 필드로 작업 할 때 where 절에서 사용할 수 없으며 linq에서 첫 번째 "from"에 대한 액세스 권한이 없기 때문에 조인을 수행 할 수 없습니다 매개 변수로. 일정 목록이 있고 각 ArrivalStations가 필요한 경우이 방법으로이를 수행 할 수있는 방법을 볼 수 있습니까? – SenseiHitokiri

관련 문제