0

这应该很简单,但我很困惑。

我有一个父/子表 - 我想做的就是从父表中选择,具体取决于子表的过滤。

因此,父表 Rooms 与 clients 表一对多地链接 - 我想选择在 Clients 表中没有链接记录的房间,其中 clients.Departure 日期在特定日期之前:

  public class Room
    {
        public int RoomId { get; set; }
        public string RoomName { get; set; }
        public List<Client> Clients { get; set; }
    }

  public class Client
    {
        public int ClientId { get; set; }
        public int RoomId { get; set; }
        public string Name { get; set; }
        public DateTime Arrival { get; set; }
        public DateTime Departure { get; set; }
        public Room Room { get; set; }
    }

在我的控制器中,我一直在尝试:

 public ActionResult Avail()
        {
            DateTime dteFrom = DateTime.Parse("2012-07-01");  //hard coded for testing
            Room room = db.Rooms.Where(r => r.Clients.Any(c => c.Departure <= dteFrom));

但我收到错误消息:

Cannot implicitly convert type 'System.Linq.IQueryable<ttp.Models.Room>' to 'ttp.Models.Room'. An explicit conversion exists (are you missing a cast?)

任何人都可以建议我是否需要更改我的模型类或我的 Where 语句?

4

1 回答 1

1

Room room表示单个房间,而db.Rooms.Where(r => r.Clients.Any(c => c.Departure <= dteFrom))返回房间列表。

如果您希望您的查询只会返回一个结果,您可以执行以下操作:

Room room = db.Rooms.SingleOrDefault(r => r.Clients.Any(c => c.Departure <= dteFrom));

或者,如果您想返回与查询匹配的所有房间,您可以执行以下操作:

IQueryable<Room> rooms = db.Rooms.Where(r => r.Clients.Any(c => c.Departure <= dteFrom));
于 2012-06-29T15:52:44.047 回答