sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo usar Linq en C# para seleccionar una cadena específica de varias columnas anidadas?

En primer lugar, arregle el modelo para que las colecciones tengan nombres plurales y los objetos solos; de lo contrario, su código se volverá muy 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; }

Ahora agreguemos algunas propiedades más al modelo para que pueda informarnos sobre las intervenciones:

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


Ahora puede preguntarle a un edificio si está en intervención y le dirá que sí, si lo está o si algo de lo que posee es

Nota:si el modelo no se ha cargado con entidades, es posible que deba emplear un truco como este:EF Core linq and conditional include and theninclude problem para cargarlos condicionalmente