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