Получить список объектов, свойства которых содержат переданный аргумент? - PullRequest
0 голосов
/ 17 марта 2012

У меня 4 основных класса: Дом, Этаж, Комната, Актив. Актив находится в комнате, которая находится на этаже в доме. Каждый из них имеет разные свойства; а именно, публичное имя строки;

Я заканчиваю методы 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 голосов
/ 20 марта 2012

Это то, что я смог сделать. Можно было бы создать составное лямбда-выражение? Но пока я буду придерживаться этого подхода.

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

        }
0 голосов
/ 17 марта 2012

Возможно, было бы проще, чтобы каждый уровень сохранял список следующего, как древовидная структура.Дом содержит список этажей.Этаж содержит список номеров.Номера содержат список активов.Каждый уровень объекта также может хранить второй «неопределенный» список.

Тогда удаление / восстановление этажей (или более низких уровней) так же просто, как перемещение записи из одного списка в другой без рекурсии.

...