web-dev-qa-db-fra.com

Comment initialiser IEnumerable <Object> qui soit vide et permettre de le concaténer?

J'ai essayé ce code pour ajouter b à books:

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

mais me donne cette erreur sur la dernière ligne de code:

System.ArgumentNullException: la valeur ne peut pas être nulle. Nom du paramètre: premier

il semble que nullCollection n'a pas pu être concaténé. J'utilise EF, alors comment dois-je initialiser mon Collection qui ne contient rien et que je pourrais concaténer?

29
Majid

Il semble que tout ce que vous voulez faire est de filtrer votre contexte. Livres selon certains critères.

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

Si vous avez toujours besoin du IEnumerable vide, vous pouvez simplement appeler Enumerable.Empty ():

IEnumerable<Book> books = Enumerable.Empty<Book>();
71
Rodrigo López
IEnumerable<Book> books = new List<Book>();
23
chris.ellis

Personnellement, j'irais avec:

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

plutôt que d'utiliser une liste.

4
Matthew Watson

Voici ce que vous essayez de faire:

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

Vous pouvez également le faire si vous souhaitez partir de null:

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

... bien que j'aie plusieurs questions sur la raison pour laquelle vous voulez/devez faire les choses de cette façon.

2
AnorZaken

Vous devez créer des livres en tant qu'objet vide IEnumerable comme List, mais n'oubliez pas d'appeler, après boucle, ToList () sur les livres. Par exemple:

        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();
0
Jakub Dropia