LINQ ищет коллекцию вложенных свойств объекта по идентификатору - PullRequest
0 голосов
/ 26 августа 2011

У меня снова возникают проблемы с некоторыми Linq, когда я пытаюсь ограничить возвращение информации, но все еще сохраняю объекты в форме иерархии (основанной на xml, из которого она поступает, и что нужно сделать в пользовательском интерфейсе) основной формат таков:

  1. Одноместный номер
    • [Коллекция номеров]
      • Комната 1 (ID = 1)
      • Номер 2 (ID = 2)
  2. Номер Твин
    • [Коллекция номеров]
      • Номер 3 (ID = 3)
      • Комната 4 (ID = 4)

но то, что я хочу, основано на идентификаторе комнаты (1,2,3,4 и т. Д.), Возвращает тип комнаты и определенную иерархию комнаты, т. Е. (Если передан идентификатор 4).

  1. Номер Твин
    • Номер 4 (ID = 4)

Я создал какой-то LINQ, который, как мне показалось, работал, но я ошибся, так как он просто возвращает первый тип комнаты (Single Room) и только комнату, если соответствует if (которую я посылаю id 3 и 4, но это не так) и смотрю в этом я полностью понимаю это.

В приведенном ниже коде элементы получены из другого метода, который в основном выводит в приведенном выше примере иерархии:

            var item = items.Select(i =>                
            new RoomType
            {
                name = i.name,
                rooms = i.rooms
                    .Where(r => r.Name == id.ToString())
            }).FirstOrDefault();

Что мне нужно сделать, это вернуть только тот тип комнаты, в которой есть комната в коллекции комнат с правильным идентификатором, который я передаю в мой метод, я не уверен, что приведенный выше код является началом, я попытался испортить вокруг с Contains и т. д., но я ищу идентификатор, когда Contains ожидает объект, поэтому я не уверен, какой здесь лучший подход, и я застрял.

Любая помощь будет отличной.

Rob

1 Ответ

2 голосов
/ 26 августа 2011
var item = items.Where(i => i.rooms.Any(r => r.Name == id.ToString())
                .Select(i =>                
                           new RoomType
                           {
                               name = i.name,
                               rooms = i.rooms
                                        .Where(r => r.Name == id.ToString())

                           }).SingleOrDefault();

Вы должны отфильтровать типы комнат, которые не содержат вашу комнату, с определенным идентификатором (это то, что делает Where с вызовом Any).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...