Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar o Linq em C # para selecionar uma string específica de várias colunas aninhadas?


Primeiro, corrija o modelo para que as coleções tenham nomes no plural e os objetos tenham um único, caso contrário, seu código ficará muito 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; }


Agora vamos adicionar mais algumas propriedades ao modelo para que ele possa nos informar sobre as intervenções:
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";



Agora você pode apenas perguntar a um prédio se é IsInIntervention e ele dirá sim se for ou se algo que ele possui é

Observação:se o modelo não tiver sido carregado com entidades, talvez seja necessário empregar um truque como este:Ef Core linq e problema de inclusão condicional e theninclude para carregá-los condicionalmente