Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser Linq en C# pour sélectionner une chaîne spécifique à partir de plusieurs colonnes imbriquées ?

Tout d'abord, veuillez corriger le modèle afin que les collections aient des noms pluriels et que les objets aient des noms uniques, sinon votre code deviendra très confus :

building.cs
  public List<Battery> Batteries { get; set; }

battery.cs
  public long BuildingId { get; set; }
  public Building Building { get; set; }
  public List<Column> Columns { get; set; }

column.cs
  public long BatteryId { get; set; }
  public Battery Battery { get; set; }
  public List<Elevator> Elevators { get; set; }

elevator.cs
  public long ColumnId { get; set; }
  public Column Columns { get; set; }

Ajoutons maintenant quelques propriétés supplémentaires au modèle afin qu'il puisse nous renseigner sur les interventions :

building.cs
  public List<Battery> Batteries { get; set; }

  [NotMapped]
  public bool IsInIntervention => this.Status == "Intervention" || Batteries.Any(b => b.IsInIntervention);

battery.cs
  public long BuildingId { get; set; }
  public Building Building { get; set; }
  public List<Column> Columns { get; set; }

  [NotMapped]
  public bool IsInIntervention => this.Status == "Intervention" || Columns.Any(c => c.IsInIntervention);


column.cs
  public long BatteryId { get; set; }
  public Battery Battery { get; set; }
  public List<Elevator> Elevators { get; set; }

  [NotMapped]
  public bool IsInIntervention => this.Status == "Intervention" || Elevators.Any(e => e.IsInIntervention);


elevator.cs
  public long ColumnId { get; set; }
  public Column Column { get; set; }

  [NotMapped]
  public bool IsInIntervention => this.Status == "Intervention";


Maintenant, vous pouvez simplement demander à un bâtiment s'il est en intervention et il dira oui s'il l'est ou si quelque chose qu'il possède l'est

Remarque :si le modèle n'a pas été chargé avec des entités, vous devrez peut-être utiliser une astuce comme celle-ci :EF Core linq et conditional include and theninclude problem pour les charger conditionnellement