initialize c# linq linq-to-entities concatenation argumentnullexception

c# - initialize - ¿Cómo inicializar IEnumerable<Objeto> que esté vacío y permita que concuerde con ello?



declare ienumerable c# (5)

Probé este código para agregar b a los books :

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

Pero me da este error en la última línea de código:

System.ArgumentNullException: el valor no puede ser nulo. Nombre del parámetro: primero

Parece que la Collection null no pudo concatenar. Utilizo EF, así que, ¿cómo debo inicializar mi Collection que no tiene nada en ella y puedo concatenarla?


Esto es lo que estás tratando de hacer:

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

Alternativamente, puedes hacer esto si quieres empezar desde null:

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

... aunque tengo varias preguntas sobre por qué quiere o necesita hacer las cosas de esta manera.


Necesita crear libros como un objeto vacío IEnumerable como Lista, pero recuerde llamar, después del bucle, ToList () en los libros. Por ejemplo:

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


Personalmente me gustaría ir con:

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

en lugar de utilizar una lista.


Todo lo que quieres hacer es filtrar tu contexto. Libros por algunos criterios.

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

Si aún necesita el IEnumerable vacío, puede llamar a Enumerable.Empty ():

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


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