0

これは単純なはずですが、混乱しています。

親/子テーブルがあります-子テーブルのフィルタリングに応じて、親テーブルから選択するだけです。

したがって、親テーブルである部屋は、クライアントテーブルに1対多でリンクされています-クライアントテーブルにリンクされたレコードがなく、クライアント.出発日が特定の日付より前である部屋を選択したい:

  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))のリストを返します。

クエリが 1 つの結果のみを返すと予想される場合は、次の操作を実行できます。

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 に答える