Mysql
 sql >> Database >  >> RDS >> Mysql

Come utilizzare Linq in C# per selezionare una stringa specifica da più colonne nidificate?

Per prima cosa, correggi il modello in modo che le raccolte abbiano nomi plurali e gli oggetti siano singoli, altrimenti il ​​tuo codice diventerà molto confuso:

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; }

Ora aggiungiamo altre proprietà al modello in modo che possa parlarci degli interventi:

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";


Ora puoi semplicemente chiedere a un edificio se è IsInIntervention e ti risponderà di sì se lo è o se lo è qualcosa che possiede

Nota:se il modello non è stato caricato con entità, potrebbe essere necessario utilizzare un trucco come questo:EF Core linq e conditional include and theninclude problem per caricarli condizionalmente