Подтвердить что ты не робот

Как инициализировать IEnumerable <Object>, который будет пустым и разрешить Concat?

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

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

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

System.ArgumentNullException: значение не может быть нулевым. Имя параметра: первый

кажется, что null Collection не может быть объединен. Я использую EF, поэтому как мне инициализировать мой Collection, в котором нет ничего, и я мог бы с ним связать?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

Лично я бы просто пошел с:

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

вместо использования списка.

Ответ 4

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

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

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

Ответ 5

Вам нужно создавать книги в виде 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();