Как инициализировать IEnumerable, чтобы быть пустым и позволить ему Конкат?

Я пробовал этот код для добавления b to books:

IEnumerable<Book> books =null;
foreach (Book b in context.Books.AsEnumerable())
    if (someConditions)
       books = books.Concat(new[] {b});

но дает мне эту ошибку на последней строке кода:

5 ответов


это швы все, что вы хотите сделать, это фильтровать контекст.Книги по некоторым критериям.

IEnumerable<Book> books = context.Books.Where(b => someConditions);

Если вам все еще нужен пустой IEnumerable, вы можете просто вызвать Enumerable.Пустой():

IEnumerable<Book> books = Enumerable.Empty<Book>();

IEnumerable<Book> books = new List<Book>();

лично я бы просто пойти с:

IEnumerable<Book> books = new Book[0];

в списке.


это то, что вы пытаетесь сделать:

IEnumerable<Book> books = Enumerable.Empty<Book>();
books = books.Concat(context.Books.AsEnumerable().Where(b => someCondition));

в качестве альтернативы вы можете сделать это, если хотите начать с null:

IEnumerable<Book> books = null;
var moreBooks = context.Books.AsEnumerable().Where(b => someCondition);
books = books == null ? moreBooks : books.Concat(moreBooks);

...хотя у меня есть несколько вопросов о том, почему вы хотите / должны делать вещи таким образом.


вам нужно создать книги как IEnumerable пустой объект, такой как List, но не забудьте вызвать, после цикла, ToList() на книгах. Например:

        IEnumerable<int> books = new List<int>();
        IEnumerable<int> books2 = new int[] { 1, 2, 3, 4 };


        foreach (int b in books2)
            if (b > 2)
                books = (new[] { b }).Concat(books);

        books = books.ToList();