まず、コレクションに複数の名前があり、オブジェクトに単一の名前が付いているようにモデルを修正してください。そうしないと、コードが非常に混乱します。
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; }
次に、モデルにいくつかのプロパティを追加して、介入について教えてもらいましょう。
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";
これで、建物にIsInInterventionかどうかを尋ねることができ、建物がIsInInterventionであるかどうか、または建物が所有しているものであるかどうかを「はい」と表示します。
注:モデルにエンティティが読み込まれていない場合は、次のようなトリックを使用する必要があります: EFCorelinqおよび条件付きインクルードおよびtheninclude問題 条件付きでロードする