如何初始化IEnumerable <object>是空的并允许Concat到它?</object>

时间:2013-07-24 10:11:48

标签: c# linq linq-to-entities concatenation argumentnullexception

我尝试使用此代码将b添加到books

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

但在最后一行代码中给出了这个错误:

  

System.ArgumentNullException:值不能为null。   参数名称:第一个

似乎null Collection无法连接。我使用EF,那么我应该如何初始化我的Collection哪个没有东西,我可以连接到它?

5 个答案:

答案 0 :(得分:67)

它接缝你要做的就是过滤你的上下文。按一些标准书。

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

如果你仍然需要空IEnumerable,你可以调用Enumerable.Empty():

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

答案 1 :(得分:21)

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

答案 2 :(得分:4)

就我个人而言:

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

而不是使用List。

答案 3 :(得分:2)

这就是你要做的事情:

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

...虽然我有几个问题,为什么你想要/需要这样做。

答案 4 :(得分:0)

您需要创建书籍作为像List这样的IEnumerable空对象,但需要记住在书籍上循环后调用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();