我正在研究一个mvc应用程序,人们可以在其中搜索火车路线。我做了我的数据库代码 - 首先与实体框架,但我似乎无法弄清楚如何问一些更复杂的查询。Linq - 包含和过滤器 - 嵌套集合
我有我在viewmodel中使用的路线的集合。因此,第一步是询问哪些路线具有特定的起点和终点站。然后,我想包括某个日期设置为真的日程安排(以及该日程安排的开始日期和结束日期匹配)。这是一个旅行集合(我使用这张表导致路线一天运行多次)。从这里我可以找到所有匹配的车站,并且从航线的HADSATION到达和离开时间。
,所以我想是这样的:
public IEnumerable<Route> Search(DateTime date, int? departure, int? arrival)
{
var day = date.DayOfWeek.ToString();
return db.Routes.Where(r => r.DepartureStationID == departure && r.ArrivalStationID == arrival)
.Include(s => s.Train)
//using linq.dynamic here
.Include(r => r.Schedule.where(day + "==" + true)
.Include(sch => sch.trip.where(date > sch.DepartureTime)
.Include(route => route.RouteHaseStations)
.Include(st => st.Stations)
}
但这offcourse不工作。以下是我的型号:
public class Route
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int RouteID { get; set; }
public String RouteName { get; set; }
[ForeignKey("Train")]
public int TrainID { get; set; }
[ForeignKey("Station")]
public int DepartureStationID { get; set; }
[ForeignKey("Station")]
public int ArrivalStationID { get; set; }
public virtual ICollection<Schedule> Schedule { get; set; }
public virtual Train Train { get; set; }
public virtual Station DepartureStation { get; set; }
public virtual Station ArrivalStation { get; set; }
}
public class Station
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int StationID { get; set; }
[Display(Name = "Station")]
public String Name { get; set; }
public int Platforms { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public virtual ICollection<RouteHasStation> RouteHasStation { get; set; }
}
public class Train
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TrainID { get; set; }
public String Name { get; set; }
public virtual ICollection<Route> Route { get; set; }
}
public class Schedule
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ScheduleID { get; set; }
[ForeignKey("Route")]
public int RouteID { get; set; }
public Boolean Monday { get; set; }
public Boolean Tuesday { get; set; }
public Boolean Wednesday { get; set; }
public Boolean Thursday { get; set; }
public Boolean Friday { get; set; }
public Boolean Saturday { get; set; }
public Boolean Sunday { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public virtual ICollection<Trip> Trip { get; set; }
public virtual Route Route { get; set; }
}
public class Trip
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TripID { get; set; }
[ForeignKey("Schedule")]
public int ScheduleID { get; set; }
public DateTime DepartureTime { get; set; }
public virtual ICollection<RouteHasStation> RouteHasStation { get; set; }
}
public class RouteHasStation
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int RouteHasStationID { get; set; }
[ForeignKey("Station")]
public int StationID { get; set; }
public virtual Station Station { get; set; }
[ForeignKey("Trip")]
public int TripID { get; set; }
public virtual Trip Trip { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")]
public DateTime? Arrival { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")]
public DateTime? Departure { get; set; }
public int Platform { get; set; }
public float Distance { get; set; }
}
请显示错误。 – DumpsterDiver
有关过滤Include的问题在StackOverflow中很多。 –
欢迎来到Stack OverFlow。请在SO中查看一些示例问题,以便您了解如何正确提出问题以便从其他用户获得快速答案。 :)祝你好运 – Unbreakable