J'ai parcouru Internet mais je n'ai pas pu trouver quelque chose pour mon cas spécifique.
Voici mes modèles:
public class Unit
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UnitID { get; set; }
public string Name { get; set; }
public int UnitStatusID { get; set; }
public List<ReservationUnit> ReservationUnits { get; set; }
}
public class ReservationUnit
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ReservationUnitID { get; set; }
[Required]
public int ReservationID { get; set; }
public Reservation Reservation { get; set; }
[Required]
public int UnitID { get; set; }
public Unit Unit { get; set; }
public decimal Amount { get; set; }
public bool AmountIsTaxInclusive { get; set; }
public bool IsFixedRate { get; set; }
}
public class Reservation
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ReservationID { get; set; }
public int ReservationStatusID { get; set; }
public List<ReservationUnit> Units { get; set; }
}
J'ai besoin de trouver:
Je peux obtenir les unités et je peux sélectionner toutes les unités de réservation ... mais je ne peux pas filtrer les réservations pour obtenir l'article de réservation inclus. Quelqu'un pourrait-il m'orienter dans la bonne direction? Voici ce que j'ai essayé:
var unitQuery =
db
.Units
.Where(x => x.UnitStatusID == 1 || x.UnitStatusID == 4)
.Include(o => o.ReservationUnits.Where(p => p.Reservation.ReservationStatusID == 1))
.ToList();
ce qui me donne l'erreur suivante:
System.ArgumentException: 'L'expression de chemin d'inclusion doit faire référence à une propriété de navigation définie sur le type. Utilisez des chemins en pointillés pour les propriétés de navigation de référence et l'opérateur Sélectionner pour les propriétés de navigation de la collection. (Paramètre 'chemin') '
Il semble que cela a fonctionné pour moi.
var unitQuery =
db
.Units
.Include("ReservationUnits.Reservation")
.Where(x => x.UnitStatusID == 1 || x.UnitStatusID == 4)
.Where(x => !x.ReservationUnits.Any() || x.ReservationUnits.Any(o => o.Reservation.ReservationStatusID == 1 || o.Reservation.ReservationStatusID == 2))
;
Est-ce que cela semble correct?