这应该很简单,但我很困惑。
我有一个父/子表 - 我想要做的就是从父表中选择,具体取决于对子表的过滤。
所以父表是一对多地链接到客户表 - 我希望选择客房,其中客户表中没有链接记录,其中客户。出发日期在特定日期之前:< / p>
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语句?
答案 0 :(得分: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));