Как инициализировать 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
, в котором нет ничего, и я мог бы с ним связать?
Ответы
Ответ 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();