2011-08-13 29 views
0

我想在使用LINQ 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 to 實體中不受支持。僅支持初始化程序,實體成員和實體導航 屬性。

在我需要信息時,我能做些什麼來訪問此屬性的信息,而不是不斷地進行聯接?

謝謝。

回答

0

您不能在linq-to-entities查詢中使用自定義屬性。只有直接映射到數據庫的屬性才能使用=您必須在您的linq-to-entities查詢中直接使用子查詢才能返回ArrivalStation。也許可以包裝成簡單的擴展方法:

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(); 
} 

哪裏Route就是路點定義您的主要實體。使用FirstOrDefault是因爲子查詢不能僅使用First

+0

我覺得我受到這樣的限制,但不知道它是什麼。我不知道該解決方案是否適用於我。如果我返回IQueryable,則無法在處理ArrivalStation上的字段時使用它,因爲我無法訪問linq中的第一個「from」以傳遞作爲參數。如果我有一個時間表集合,並且需要所有到達站點,您是否可以通過此方法找到一種方法來完成此任務? – SenseiHitokiri