获取其属性包含传递参数的实体列表?

时间:2012-03-16 21:24:09

标签: c# loops ienumerable

我有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?

如果我的问题不够明确或缺乏重要信息,请告诉我,我会尽快回复。

2 个答案:

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

        }