Лямбда для вложенных массивов - PullRequest
4 голосов
/ 19 февраля 2011

У меня есть список пользовательских объектов:

List<SomeObject> someobjects = getAllSomeObjects();
List<SomeObject> someobjectsfiltered = new List<SomeObject>();

class SomeObject
{
  List <AnotherList>
}

class AnotherList
{
  public string Name{get;set;}
  public Categories category {get;set;}
}

Поэтому я пытаюсь получить все элементы AnotherList определенного типа, используя Lambda

someobjectsfiltered = someobjects.SelectMany(s => s.AnotherList.FindAll(a => a.category == SomeCategory));

Но я получаю

Не удается неявно преобразовать тип IEnumerable в Generic.List

error

Есть идеи, как решить эту проблему?

Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 19 февраля 2011

Вам нужно бросить ToList() в конце или изменить тип результата на IEnumerable<SomeObject>, потому что, как говорит ошибка, вы не можете присвоить IEnumerable<T> переменной типа List<T>.

someobjectsfiltered = someobjects.SelectMany(s => s.AnotherList.FindAll(a => a.category == SomeCategory))
                                 .ToList();

Редактирование на основе комментариев

Если вам нужно SomeObjects, у которого есть список, содержащий элемент, соответствующий категории, вы можете сделать это, используя.

someobjectsfiltered = someobjects.Where( s => s.AnotherList.Any( a => a.category == SomeCategory ))
                                 .ToList();
2 голосов
/ 20 февраля 2011

@ tvanfosson @Maya Не уверен, как здесь будет работать «Любой», поскольку он будет возвращаться с истиной все время, вызывая обратный выбор всего другого списка (внутреннего списка), если этот тип «Категория» существует один раз в внутренний список, тогда будет выбрано все его содержимое, в том числе с нежелательными типами категорий.

1 голос
/ 19 февраля 2011

SelectMany возвращает IEnumerable<T> - вы можете преобразовать его в List<T>, просто добавив вызов к ToList() в конце.

someobjectsfiltered = someobjects.SelectMany(s => s.AnotherList.FindAll(a => a.category == SomeCategory)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...