Model trzeba najpierw dopracować. To, ze masz w TypPokoju pole PokojId nie oznacza jeszcze żadnego powiązania. To samo w tabeli PokojRezerwacja. Zobacz w bazie danych czy Ci sie wygenerowały klucze obce.
Poza tym szczegół logiczny czy domenowy. Data zameldowania czy wymeldowania ma się nijak do rezerwacji. To kwestia logicznych nazw, ale zwracaj na takie rzeczy uwagę bo w większych aplikacjach może być duże zamieszanie przez takie nazwy. Lepiej dać RezerwacjaOd i Do albo coś podobnego.
public class TypPokoju
{
public int ID{get;set;}
public string Opis{get;set;}
public virtual ICollection<Pokoj> Pokoje { get; set; }
}
public class Pokoj
{
public int ID{get;set;}
publc string Status{get;set;}
public int? TypPokoju{get;set;} // konfiguracja klucza obcego albo tu w Annotiation albo we FluentAPI
public virtual TypPokoju Typ { get; set; }
public ICollection <PokojRezerwacja> PokojRezerwacje {get;set;}
}
public class PokojRezerwacja
{
public int RezerwacjaID{get;set;} // to trzeba skonfigurować jako klucz
public int PokojID{get;set;} // // to trzeba skonfigurować jako klucz np
/*
[Key, Column(Order = 0)]
public int RezerwacjaID{get;set;}
[Key, Column(Order = 1)]
public int PokojID{get;set;}
*/
public virtual Pokoj Pokoj {get;set;}
public virtual rezerwacja Rezerwacja{get;set;}
public DateTime DataZameldowania{get;set;}
public DateTime DataWymeldowania{get;set;}
}
public class Rezerwacja
{
public int ID{get;set;}
public ICollection <PokojRezerwacja> PokojRezerwacje {get;set;}
}
i dopiero teraz. Jak chcesz się dowiedzieć, które pokoje są wolne to tabela PokojRezerwacja Ci na to nie odpowie bo tam nie ma tych informacji, tam są tylko pokoje, które są zarezerwowane. Musisz się pytać o dane z tabeli Pokoje w powiązaniu z PokojRezerwacje.
Np.
db.Pokoje.Where(x => x.PokojRezerwacje.Count(z => z.DataZameldowania >= d1 ) == 0);
albo z Any
db.Pokoje.Where(x => !x.PokojRezerwacje.Any(z => z.DataZameldowania >= d1 ));
Tu sprawdzam tylko DataZameldowania bo jak pokój ma być wolny od tej daty to DataWymeldowania już mnie nie interesuje bo ten pokój i tak jest zajęty od DataZameldowania.