我正在尝试在POCO上使用一个属性,该属性使用LINQ to ENTITY将第一个对象从同一个POCO上的HashSet属性中拉出来。我的对象包含以下内容:
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,只有在填充后才可以执行此操作。我有办法让这个工作吗?现在它告诉我:
LINQ to不支持指定的类型成员'ArivalStation' 实体。仅初始化程序,实体成员和实体导航 支持属性。
我需要做些什么才能在属性上访问此信息,而不是在需要信息时不断地进行连接?
感谢。
答案 0 :(得分: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
。