我有4个主要课程:House,Floor,Room,Asset。 资产位于房间内,房间位于房屋内。 每个都有不同的属性;即公共字符串名称;
我正在完成CRUD方法并遇到一个相当简单的问题,即删除整个楼层,可能包含也可能不包含房间和/或资产。
//pseudocode-ish
House.cs
private readonly List<Floor> _floors = new List<Floor>();
private readonly List<Room> _rooms = new List<Room>();
private readonly List<Asset> _assets = new List<Asset>();
.
..
public IEnumerable<Floor> GetFloors()
{
return _floors;
}
public IEnumerable<Room> GetRooms()
{
return _rooms;
}
public IEnumerable<Asset> GetAssets()
{
return _Assets;
}
...
..
.
public void deleteFloor(Floor oldFloor)
{
//locate rooms on oldFloor (roomOnFloor.floor.name == oldfloor.name)
//locate a rooms with assets ( asset.room.name == roomOnFloor.floor.name)
//create a "limbo" room and move assets into it.
{
我认为最好的办法就是利用IEnumerable和一些逻辑参数。不知道从哪里开始。或者也许抓住属性并运行foreach?
如果我的问题不够明确或缺乏重要信息,请告诉我,我会尽快回复。
答案 0 :(得分:0)
让每个级别存储下一个列表(如树结构)会更简单。 House包含一个楼层列表。楼层包含房间列表。客房包含资产列表。每个对象级别还可以存储第二个“limbo”列表。
然后删除/恢复楼层(或更低级别)就像将条目从一个列表移动到另一个列表而不递归一样简单。
答案 1 :(得分:0)
这是我能够做到的。人们可能会创建一个复合lambda表达式?但是现在我会坚持这种做法。
foreach (Room room in this._rooms)
{
if (oldFloor.Name == room.Floor.Name)
{
foreach (Asset asset in this._assets)
{
if (asset.Parent == room)
{
asset.Parent = null;
}
}
}
}