Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwendet man Linq in C#, um eine bestimmte Zeichenfolge aus mehreren verschachtelten Spalten auszuwählen?

Korrigieren Sie bitte zunächst das Modell so, dass Sammlungen mehrere Namen und Objekte nur einen haben, sonst wird Ihr Code sehr durcheinander:

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

Jetzt fügen wir dem Modell weitere Eigenschaften hinzu, damit es uns Informationen über Eingriffe geben kann:

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


Jetzt können Sie einfach ein Gebäude fragen, ob es InIntervention ist, und es wird Ja sagen, wenn es ist, oder ob irgendetwas, das es besitzt, ist

Hinweis:Wenn das Modell nicht mit Entitäten geladen wurde, müssen Sie möglicherweise einen Trick wie diesen anwenden:EF Core linq und bedingtes include-and-theninclude-Problem um sie bedingt zu laden